IEEE 754 ๋ถ๋์์์ ๋ณํ๊ธฐ๋?
์ด ๋๊ตฌ๋ 32๋นํธ 16์ง์ ๊ฐ์ IEEE 754 ๋จ์ ๋ฐ๋(single-precision) ํ์ค์ ๋ฐ๋ผ ์ค์ ์ซ์๋ก ๋์ฝ๋ฉํฉ๋๋ค. IEEE 754๋ C, Java๋ฅผ ๋น๋กฏํ ๋๋ถ๋ถ์ ์ต์ ํ๋์จ์ด์์ float ํ์
์ ์ฌ์ฉํ๋ ํ์์ด์ฃ . 16์ง์ 8์๋ฆฌ๋ฅผ ์
๋ ฅํ๋ฉด ๊ณ์ฐ๊ธฐ๊ฐ ์ด ๊ฐ์ float๋ฅผ ๊ตฌ์ฑํ๋ ์ธ ๊ฐ์ง ํ๋, ์ฆ ๋ถํธ ๋นํธ 1๊ฐ, ์ง์ ๋นํธ 8๊ฐ, ๊ฐ์(์์๋ถ) ๋นํธ 23๊ฐ๋ก ๋๋ ๋ค ๋ค์ 10์ง์ ๊ฐ์ผ๋ก ์กฐํฉํด ๋ณด์ฌ์ค๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
32๋นํธ ๊ฐ์ 16์ง์๋ก ์
๋ ฅํ์ธ์(์: 40490FDB). "0x" ์ ๋์ฌ๋ ๋ถ์ด์ง ์์๋ ๋๋ฉฐ, 16์ง์๊ฐ ์๋ ๋ฌธ์๋ ์๋์ผ๋ก ๋ฌด์๋ฉ๋๋ค. 8์๋ฆฌ๋ณด๋ค ์งง์ผ๋ฉด ์ผ์ชฝ์ด 0์ผ๋ก ์ฑ์์ง๋๋ค. ๊ฒฐ๊ณผ์๋ 10์ง์ ๊ฐ๊ณผ ํจ๊ป ๋์ฝ๋ฉ๋ ๋ถํธ, ์ ์ฅ๋ ์ง์, ๋ฐ์ด์ด์ค๋ฅผ ๋บ ์ง์, ๊ฐ์๊ฐ ํ์๋๋ฏ๋ก ๋นํธ ๋ฐฐ์น๋ฅผ ์ง์ ๊ฒ์ฆํด ๋ณผ ์ ์์ต๋๋ค.
๊ณต์ ์ค๋ช
์ ๊ทํ๋ ์(normal number)์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ฐ๋ฉ๋๋ค.
$$\text{Value} = (-1)^{s} \times \left(1 + \frac{m}{2^{23}}\right) \times 2^{(e - 127)}$$์ฌ๊ธฐ์ 127์ ๋จ์ ๋ฐ๋์ ์ง์ ๋ฐ์ด์ด์ค(bias)์ ๋๋ค. "1 +" ๋ถ๋ถ์ ์ ๊ทํ๋ ์ด์ง์๊ฐ ํญ์ ๊ฐ์ง๋ ์๋ฌต์ ์ ํ ๋นํธ(implicit leading bit)๋ฅผ ๋ฐ์ํ ๊ฒ์ ๋๋ค. ์ ์ฅ๋ ์ง์ \(e\)๊ฐ 0์ด๋ฉด ๋น์ ๊ท์(subnormal)๋ก, ์๋ฌต์ ์ ํ 1์ด ์ฌ๋ผ์ง๊ณ ์ง์๋ -126์ผ๋ก ๊ณ ์ ๋ฉ๋๋ค. \(e\)๊ฐ 255์ด๋ฉด ๊ฐ์๊ฐ 0์ผ ๋๋ ๋ฌดํ๋(infinity), 0์ด ์๋ ๋๋ NaN์ ๋ํ๋ ๋๋ค.
์์ ํ์ด
40490FDB๋ฅผ ์๋ก ๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ์ด์ง์๋ก ๋ณด๋ฉด ๋ถํธ๋ 0(์์)์ด๊ณ , ์ง์ ํ๋๋ 10000000 = 128์ด๋ฏ๋ก ๋ฐ์ด์ด์ค๋ฅผ ๋บ ์ง์๋ \(128 - 127 = 1\)์
๋๋ค. ๊ฐ์ ๋นํธ๋ 4788187์ด๋ฏ๋ก ์์๋ถ๋ \(4788187/8388608 \approx 0.5707964\)๊ฐ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ \((1 + 0.5707964) \times 2^{1} \approx 3.14159274\)๋ก, ๋จ์ ๋ฐ๋๋ก ํํํ ์ ์๋ ฯ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ทผ์ฟ๊ฐ์
๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
์ ๊ฒฐ๊ณผ๊ฐ ์ ๊ฐ ์์ํ ๊ฐ๊ณผ ์ ํํ ์ผ์นํ์ง ์๋์? ๋จ์ ๋ฐ๋๋ ์ฝ 7์๋ฆฌ์ 10์ง ์ ๋ฐ๋๋ง ์ ๊ณตํฉ๋๋ค. ๊ทธ๋์ ๋ง์ 10์ง์ ๊ฐ์ด ํํ ๊ฐ๋ฅํ ๊ฐ์ฅ ๊ฐ๊น์ด float ๊ฐ์ผ๋ก ๋ฐ์ฌ๋ฆผ๋ฉ๋๋ค.
๋ฐฐ์ ๋ฐ๋(64๋นํธ)๋ ์ด๋ค๊ฐ์? ์ด ๋๊ตฌ๋ 32๋นํธ ๋จ์ ๋ฐ๋๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ๋ฐฐ์ ๋ฐ๋(double)๋ ์ง์ 11๋นํธ, ๊ฐ์ 52๋นํธ, ๋ฐ์ด์ด์ค 1023์ ์ฌ์ฉํฉ๋๋ค.
7FC00000์ ์ด๋ค ๊ฐ์ธ๊ฐ์? ์ด๋ NaN(์ง์๊ฐ ๋ชจ๋ 1, ๊ฐ์๊ฐ 0์ด ์๋)์ผ๋ก, ์ ํํ ์ซ์๊ฐ ์๋๋๋ค.