[CS] ๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ์ - ์ค์(Real number)
ํ๊ทธ: CS
์นดํ ๊ณ ๋ฆฌ: CS
์ด์ ๊ธ ์์ ์ ์์ ์ ์ฅ ๋ฐฉ๋ฒ์ ๋ํด ์ดํด๋ดค์ต๋๋ค. ์ด๋ฒ ๊ธ์์๋ ์ค์๋ฅผ 2์ง์๋ก ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
โ๏ธ ์ค์๋ฅผ 2์ง์๋ก ํํํ๋ ๋ฐฉ๋ฒ
๋ถ๋์์์ ์ ๋ํด ์์๋ณด๊ธฐ ์ ์ 10์ง์ ์ ์๋ฅผ 2์ง์๋ก ๋ณํํ๋ ๊ณผ์ ์ ๋ค์ ์ดํด๋ณด์.
\(13_{(10)}\) ์ 2์ง์๋ก ๋ฐ๊พธ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ด 2๋ก ๊ณ์ํด์ ๋๋๋ค. ์ฌ๊ธฐ์ ๋๋๋ค๋ ํ์์ ์๋ฏธ๋ 2๊ฐ 13์ ๋ช๊ฐ๋ ํฌํจ๋์ด ์๋์ง๋ฅผ ์์๋ณด๊ธฐ ์ํจ์ด๋ค.
10์ง์๊ฐ 10์ด ๋ ๋ ๋ง๋ค ์๋ฆฟ ์๊ฐ ์ฌ๋ผ๊ฐ๋ฏ์ด 2์ง์ ์์๋ 2๊ฐ ๋ ๋ ์๋ฆฟ ์๊ฐ ํ๋ ์ฌ๋ผ๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
13์ 2์ง์๋ก ๋ฐ๊พธ๋ ๊ณผ์
์์ฒ๋ผ ๋๋์
ํ ๋๋จธ์ง๋ฅผ ์๋์์๋ถํฐ ์์๋๋ก ์๋ก ๋์ดํ๋ฉด 1101์ด ๋๊ณ ์ด๊ฒ 13์ 2์ง์๊ฐ ๋๋ค.
์ ๊ทธ๋ ๊ฒ ๋๋์ง ํ ๋์ ์์๋ณด๊ธฐ ์ฝ๊ฒ ๊ณฑํ๊ธฐ ํ์์ผ๋ก ๋ฐ๊ฟ๋ณด๊ฒ ๋ค.
์ฐ์ 13์ 2๊ฐ ๋ช๊ฐ ๋ค์ด์๋์ง ์๊ธฐ ์ํด์ \(2^n\) ํ์์ผ๋ก ๋ํ๋ด์ผ ํ๋ค. ์ด๋, ๋๋์ ์ ๋ฆฌ๋ฅผ ์ด์ฉํด ๊ณฑ์ ํํ๋ก ํํํด๋ณด๋ฉด ์๋์ฒ๋ผ 2์ ๊ฑฐ๋ญ์ ๊ณฑ์ผ๋ก ํํํ ์ ์๋ค.
๋๋์ ์ ๋ฆฌ
\[\begin{align} 13 &= 2 \cdot (2 \cdot (2 \cdot 1 + 1) + 0) + 1 \cr &= 2 \cdot (2 \cdot ( 2 + 1 ) + 0) + 1 \cr &= 2 \cdot ( 2^2 + 2^1 + 0) + 1 \cr &= 2^3 + 2^2 + 2^0 \end{align} \]
\[ 2^3 \times \color{red} 1 \color{black} + 2^2 \times \color{red} 1 \color{black} + 2^1 \times \color{red} 0 \color{black} + 2^0 \times \color{red} 1 \color{black} = 1101_2 \]
์ ์์ ๊ฒฝ์ฐ 10์ง์๋ฅผ 2๋ก ๊ณ์ ๋๋๋ฉด์ 1 ๋๋ 0์ ๋ฝ์๋ด ์๋์์๋ถํฐ ์์๋๋ก ๋์ดํ๋ฉด 2์ง์๊ฐ ๋๋ค. ์ด๋ 2์ง์ ๋ณํ ๊ณผ์ ์์ \(2^n\) ์๋ฆฌ ๋นํธ๋ฅผ ์ฑ์๊ฐ๋ ๊ณผ์ ์ด๋ผ๊ณ ๋ณด๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฌ๋ฉด ์ ์๊ฐ ์๋๋ผ ์ค์(real number)์ ๊ฒฝ์ฐ ์์ ๋ถ๋ถ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ ๊น?
์๋ฅผ๋ค์ด ๊ฐ๊ฒฉ์ด 1200์์ธ ๋ฌผ๊ฑด์ ๊ตฌ๋งคํ๋ ค๊ณ ํ๋ค. ์ด๋ 2000์์ ๋ธ๋ค๋ฉด ๊ฑฐ์ค๋ฆ๋์ ๊ตฌํ๋ ๊ณผ์ ์ ์๊ฐํด๋ณด์. ๋น์ฐํ ๋จ์๊ฐ ํฐ ์งํ๋ถํฐ ์ฐจ๋ก๋๋ก ๋ช์ฅ์ด ํ์ํ์ง ์๊ฐํ ๊ฒ์ด๋ค.
2์ง์๋ก ๋ณํํ๋ ๊ณผ์ ๋ ๋๊ฐ๋ค.
์ ์ ๋ถ๋ถ์ ์ ์ผ ํฐ ๋จ์์ธ \(2^n\) ์ด ๋ช๊ฐ ํ์ํ์ง ๋ถํฐ ์์ํด์ \(2^{n-1}\) ์ ๊ฐฏ์, \(2^{n-2}\) ์ ๊ฐฏ์โฆ ์ด๋ ๊ฒ ์ฐจ๋ก๋๋ก ๊ฐฏ์๋ฅผ ์ ์ด์ฃผ๋ฉด ๋๋ค. ํ์๋ฆฌ์ฉ ๋ด๋ ค์ฌ ์๋ก ๋๋๊ธฐ 2๋ฅผ ํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
์ด๋ ๊ฒ ์ญ ์งํํด ๋๊ฐ๋ค๊ฐ 0์ดํ์ ์๋ก ๋จ์ด์ง๋ฉด ๊ทธ๋๋ถํด \(2^-1\)(10์ง์๋ก 0.5)์ด ์ ์ผ ํฐ ๋จ์๊ฐ ๋๋ค. ์ด๋๋ถํด ํ ์๋ฆฌ์ฉ ๋ด๋ ค์ฌ ์๋ก \(\times 2\)๋ฅผ ํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
โ๏ธ ์์ ๋ถ๋ถ์ด๋ 1๋ณด๋ค ์์ ์๋ฅผ ์๋ฏธํ๋ค. ์ฆ, 2์ง์ ๋ณํ ๊ฒฐ๊ณผ \(2^0\) ์๋ฆฌ ์๋์ชฝ ์๋ฆฌ๋ฅผ ์๋ฏธํ๋ค. (\(2^{-1}, 2^{-2}, โฆ\))
์๋ฅผ๋ค์ด, 0.375๋ฅผ 2์ง์๋ก ๋ณํํด๋ณด์.
โฃ 0.375 * 2 = 0.75 --> 0 (2^-1 ์ ์๋ฆฌ) โฃ 0.75 * 2 = 1.5 --> 1 (2^-2 ์ ์๋ฆฌ) โฃ 0.5 * 2 = 1.0 --> 1 (2^-3 ์ ์๋ฆฌ) v 0 ์ด๋ฏ๋ก ๊ณ์ฐ ์ข ๋ฃ => 0.011(2์ง์)
์์ซ์ ์๋ ์ ์ผ ํฐ ๋จ์์ธ \(2^-1\) ์ด 0๊ฐ, ๊ทธ ๋ค์ ๋จ์์ธ \(2^{-2}\) ๊ฐ 1๊ฐ, \(2^{-3}\) ์ด 1๊ฐ๊ฐ ๋๋ค. \[2^{-1} \times \color{red} 0 \color{black} + 2^{-2} \times \color{red} 1 \color{black} + 2^{-3} \times \color{red} 1 \color{black} = 0.011_2\] ์ด์ ์์์ ์ 2์ง์๋ก ๋ณํํ์ผ๋ ์ด๋๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ธฐ๋ง ํ๋ฉด ๋ ๊น?
์๋์ ์์๋ ์ดํด๋ณด์.
ex) 0.127 โฃ 0.127 * 2 = 0.254 --> 0 โฃ 0.254 * 2 = 0.508 --> 0 โฃ 0.508 * 2 = 1.016 --> 1 โฃ 0.016 * 2 = 0.032 --> 0 โฃ 0.032 * 2 = 0.064 --> 0 โฃ 0.064 * 2 = 0.128 --> 0 โฃ 0.128 * 2 = 0.256 --> 0 โฃ 0.256 * 2 = 0.512 --> 0 โฃ 0.512 * 2 = 1.024 --> 1 v 0.024 * 2 = 0.048 --> 0 ....
์ ์์์ฒ๋ผ ์๋ฌด๋ฆฌ 2๋ฅผ ๊ณฑํด๋ ์์์ ์๋๊ฐ 0์ด ์๋์ค๋ ๊ฒฝ์ฐ๋ ์๋ค. ์ฆ, ์ซ์๋ง๋ค 2์ง์๋ก ๋ณํ์ ์ ์ฅํด์ผํ ๋นํธ์ ๊ธธ์ด๊ฐ ๋ฌ๋ผ์ง๋ค.
1. ๊ณ ์ ์์์ ๋ฐฉ์(Fixed-point)
๊ณ ์ ์์์ ๋ฐฉ์์ผ๋ก 2์ง์๋ฅผ ์ ์ฅํ๊ฒ ๋๋ ๊ฒฝ์ฐ ๊ทธ๋๋ก ์ ์ฅํ๋ค.
\(12.375 = 1100.011_2\) ๋ฅผ 16bit ๋ฉ๋ชจ๋ฆฌ ๊ณ ์ ์์์ ๋ฐฉ์์ผ๋ก ์ ์ฅํ๋ค๋ฉด ์๋ ๊ทธ๋ฆผ์ฒ๋ผ ์ ์ฅ๋๋ค.
์์ฃผ ์ง๊ด์ ์ผ๋ก 2์ง์ ๋ณํ ๊ฒฐ๊ณผ ๊ทธ๋๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ค.
- ์ฅ์
- ๊ตฌํํ๊ธฐ ์ฝ๋ค.
- ์ ์ํ ์๋ฃํ์ ์ฐ์ฐ์ ๋ถ๋์์์ ์๋ฃํ์ ์ฐ์ฐ๋ณด๋ค ๋น ๋ฅด๊ฒ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
- ๋จ์
- ์ฌ์ฉํ๋ ๋นํธ ์ ๋๋น ํํ ๊ฐ๋ฅํ ์์ ๋ฒ์ ๋๋ ์ ๋ฐ๋๊ฐ ๋ฎ๋ค.
- ์ฐจ์ด
- ์ฐ์ฐ ์ ์ฐจ ์์ผ๋ก๋ ๋ถ๋์์์ ์ ๊ณฑ์ ์ด ๊ฐํธํ๊ณ , ๊ณ ์ ์์์ ์ ๋ง์ /๋บ์ ์ด ๊ฐํธํ๋ค๋ ์ฐจ์ด๋ฅผ ๋ณด์ธ๋ค.
2. ๋ถ๋์์์ ๋ฐฉ์(Floating-point)
๋ถ๋์์์ ๋ฐฉ์์ ์๋ฅผ \((๊ฐ์) \times (๋ฐ์)^{(์ง์)}\) ์ ๊ฐ์ด ๊ณฑ์ ํํ๋ก ํํํ๋ค. ์๋ฅผ ๋ค์ด 12.375 ์ ๊ฒฝ์ฐ ์์์ ์ ๋ถ๋ถ์ 2์ง์๋ก ๋ณํํ๋ฉด \((12.)_{10} = (1100)_{2}\) ์ด๊ณ , ์์์ ์๋ ๋ถ๋ถ์ ๋ณํํ๋ฉด \((.375)_{10} = (0.011)_2\) ์ด ๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
// ์ ์๋ถ
12
= 1100
// ์์๋ถ
0.375
= 0.375 * 2 = 0.75 -> 0
= 0.75 * 2 = 1.5 -> 1
= 0.5 * 2 = 1.0 -> 1
// ๊ฒฐ๊ณผ
12.375
= 1100.011(2)
๊ทธ ํ ๋ค์๊ณผ ๊ฐ์ด ์ธ ๋ถ๋ถ์ ๊ฐ์ผ๋ก ์ค์๋ฅผ ์ ์ฅํ๋ค.
- ๋ถํธ๋ถ (1๋นํธ) : ์์์ผ ๋๋ 0, ์์์ผ ๋๋ 1
- ์ง์๋ถ (๋ถํธ๊ฐ ์๋ ์ ์, 8๋นํธ) : 8๋นํธ๋ก ํ์
- ์ ๊ทํ๋ ๊ฐ์๋ถ (๋ถํธ๊ฐ ์๋ ์ ์, 23๋นํธ) : ์ ์ผ ์์ ๋นํธ๋ ์ ๊ทํ๋์์ผ๋ฏ๋ก 1์ด๋ค.
์ ๊ทํ
๋จผ์ ์ ๊ทํ๋ฅผ ์งํํ๋ค. ์ฌ๊ธฐ์ ๋งํ๋ ์ ๊ทํ๋
1
1.xxxx...* 2^n
์ ํํ๋ก ๋ํ๋ด๋ ๊ฒ์ ๋งํ๋ค. ์ ์๋ถ์ 1์ด ๋จ์๋ ๊น์ง ์์์ ์ ์ด๋์์ผ ๋ง๋ ๋ค.
1
1100.011 -> 1.100011 * 2^3
์ ์ ๊ทํ๋ ๊ฐ์๋ถ ์ ์ฅ ๋ฐฉ์๋๋ก ๊ฐ์๋ถ์ ๊ทธ๋๋ก ์ ์ฅํ๋ค. ๋จ์ ๋ถ๋ถ์ 0์ผ๋ก ์ฑ์ด๋ค.
์ง์๋ถ ์ ์ฅ
์ง์๋ถ 3์ IEEE 754 ์ ๋ฐ๋ผ์ ๋ณ๊ฒฝํ๋ค.
32bit ๋ฉ๋ชจ๋ฆฌ์์ ์ง์๋ถ ์์ญ์ ๋นํธ ์๋ 8bit ์ด๋ฏ๋ก bias ๊ฐ์ 127์ด๋๋ค. bias ๊ฐ์ ๋ํ๋ ์ด์ ๋ ์ง์๊ฐ ์์๊ฐ ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
1
0.000101(2) -> 1.01 * 2^-4
์ด์ ๊ฐ์ด ์ง์๊ฐ ์์๊ฐ ๋๋ ๊ฒฝ์ฐ์๋ 8bit ์์ญ์ผ๋ก ํ์๊ฐ ๊ฐ๋ฅํด์ผ ํ๋ค. ์ด์ ๋ํ ์์ด๋์ด๋ก 8bit ์์ญ์ ๋ฐ์ผ๋ก ๋๋ ์์์ ์์๋ก ํํํ๋ค๋ ๊ฒ์ด๋ค. 10์ง์ ๊ธฐ์ค์ผ๋ก 0~127 ๊ตฌ๊ฐ์ ์์๋ก, 128~255 ๊ตฌ๊ฐ์ ์์๋ฅผ ํํํ๊ฒ ํ๋ค. \(K(bias) = 2^{(8-1)} - 1 = 2^7 - 1 = 127\) ์ ์ง์์ ๋ํด 130์ผ๋ก ๋ง๋ ํ 130์ 2์ง์๋ก ํํํด ์ง์๋ถ์ ์ ์ฅํ๋ค.
1
2
130
= 1000 0010(2)
์ต์ข ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ ์ฅ๋๋ค. \(12.375 = 1100.011_2\)
์ ํ๋
์ด๋ ๊ฒ ๋ถ๋์์์ ์ ์ฌ์ฉํ์์๋ ํด๊ฒฐํ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ์๋ค. ์์ ๋ถ๋ถ์ 2์ง์๋ก ๋ณํํ ๋ ๊ทธ ๊ธธ์ด๋ฅผ ๋ฏธ๋ฆฌ ์ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ฆ, 32bit ์ ๊ฒฝ์ฐ(๋จ์ ๋ฐ๋) 23bit ์ ํด๋นํ๋ ๊ฐ์๋ถ ์์ญ์ด ์์ง๋ง ์์ ๋ถ๋ถ์ ๊ฐ์๋ถ๊ฐ ๊ทธ ์์ญ์ ๋์ด๊ฐ ์ ์๋ค. ์ด๋ด ๊ฒฝ์ฐ๋ฅผ ๋๋นํด 64bit(๋ฐฐ์ ๋ฐ๋) ์ฒด๊ณ๋ฅผ ์ง์ํ๋ค. 64bit(๋ฐฐ์ ๋ฐ๋)
64bit(๋ฐฐ์ ๋ฐ๋) ์์๋ ์ง์๋ถ๊ฐ 11bit ์ด๊ณ , ๊ฐ์๋ถ๊ฐ 52bit ๋ก 32bit(๋จ์ ๋ฐ๋)์ ๋นํด ๋๋ํ๋ค.
- ๋ถํธ๋ถ (1๋นํธ) : ์์์ผ ๋๋ 0, ์์์ผ ๋๋ 1
- ์ง์๋ถ (๋ถํธ๊ฐ ์๋ ์ ์, 11๋นํธ) : 11๋นํธ๋ก ํ์
- ์ ๊ทํ๋ ๊ฐ์๋ถ (๋ถํธ๊ฐ ์๋ ์ ์, 52๋นํธ) : ์ ์ผ ์์ ๋นํธ๋ ์ ๊ทํ๋์์ผ๋ฏ๋ก 1์ด๋ค.
- \(K(bias) = 2^{11-1} - 1 = 1024 - 1 = 1023\)
- 0~1023 : ์์, 1024~2047: ์์
์ ๋ฆฌ
java ์์๋ ๋ถ๋์์์ ์ ์ฅ ํ์์ผ๋ก float(32bit)
์ double(64bit)
๊ฐ ์กด์ฌํ๋ค.
์์์ ์ฐ์ฐ์ ์ ๋ฐํ๊ฒ ์ ์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
์ด๋ค ์์ ์๋ฆฟ์(์ ํจ์ซ์)๊ฐ 7์๋ฆฌ ์ดํ์ธ ๊ฒฝ์ฐ์ ๋์ ํ๋ฅ ๋ก float(32bit)
์ ์ ์ฅ๋ ์ ์๊ณ , 15์๋ฆฌ ์ด์์ธ ๊ฒฝ์ฐ double(64bit)
์ ์ ์ฅํด์ผ ๊ทธ๋๋ง ์ ํํ ์ซ์๋ฅผ ์ ์ฅํ ์ ์๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ