[CS] ์ปดํจํฐ์ ์ค์(Real Number) ํํ - ๊ณ ์ ์์์ , ๋ถ๋ ์์์ , ์ง์ ํ๊ธฐ๋ฒ, ์ ๊ทํ ์ด ์ ๋ฆฌ
์ค์๋ฅผ 2์ง์๋ก ๋ณํํ๊ธฐ
2์ง์๋ 0๊ณผ 1, ๋ ๊ฐ์ ์ซ์๋ง์ ์ฌ์ฉํ์ฌ ์ ๋ณด๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ปดํจํฐ๋ ๋ด๋ถ์ ์ผ๋ก 2์ง์๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ค. ๋นํธ(bit)๋ binary digit์ ์ค์๋ง๋ก ์ด์ง ์ซ์ ์ฒด๊ณ์ ๊ธฐ๋ณธ ๋จ์์ด๋ค. ๊ฐ ๋นํธ๋ 0 ๋๋ 1์ ๊ฐ์ ๊ฐ์ง ์ ์๋ค.
์ ์
์ผ์์ํ์์ ์ฌ์ฉํ๋ 10์ง์ ์ซ์ 100์ 2์ง์๋ก ๋ณํํ๋ ค๋ฉด, ๋ชซ์ด 0์ด ๋ ๋๊น์ง 2๋ก ๋๋๊ณ , ๋ง์ง๋ง์ ๋์จ ๋๋จธ์ง๋ถํฐ(์ญ์์ผ๋ก) ๋์ดํ๋ฉด ๋๋ค.
์ ํ ์์
์ ์๋ ์์ฒ๋ผ ๊ฐ๋จํ๊ฒ ๋ณํํ ์ ์์ง๋ง, 0.5, 0.33 ๊ฐ์ ์ค์๋ฅผ ๋ณํํ๋ ค๋ฉด ๋ ๋ณต์กํ ๊ณผ์ ์ด ํ์ํ๋ค.
์๋ฅผ ๋ค์ด 10์ง์ 68.625๋ฅผ 2์ง์๋ก ๋ณํํ๋ ค๋ฉด ์ซ์๋ฅผ ์ ์๋ถ์ ์์๋ถ๋ก ๋ถ๋ฆฌํด์ผ ํ๋ค. 10์ง์ 68.625์ ์ ์๋ถ๋ 68, ์์๋ถ๋ 0.625๋ค. ์ ์๋ถ๋ ์์ ๋์ผํ ๋ฐฉ๋ฒ์ผ๋ก 2์ง์๋ก ๋ณํํ ์ ์๋ค.
์์๋ถ๋ฅผ 2์ง์๋ก ๋ณํํ๋ ค๋ฉด 2๋ฅผ ๊ณฑํ ํ ๊ทธ ๊ฒฐ๊ณผ์ ์ ์๋ถ๋ฅผ ๊ธฐ๋กํ๊ณ , ์์๋ถ๋ง ๊ฐ์ ธ์์ ๋ค์ 2๋ฅผ ๊ณฑํด์ค๋ค. ์ด ๊ณผ์ ์ ๊ณ์ฐ ๊ฒฐ๊ณผ๊ฐ 1์ด ๋๊ฑฐ๋(์์๋ถ 0), ๋๊ฐ์ ์์๋ถ๊ฐ ๋์ฌ ๋๊น์ง ๋ฐ๋ณตํ๊ณ , ๊ธฐ๋ก๋ ์ ์๋ถ๋ฅผ ์ฒ์๋ถํฐ ๋์ดํ๋ฉด ๋๋ค.
์ด์ ์ ์๋ถ์ ์์๋ถ๋ฅผ ํฉ์น๋ฉด 10์ง์ 68.625์ ๋ํ 2์ง์ ๋ณํ์ด ์๋ฃ๋๋ค.
๋ฌดํ ์์
0.3 ๊ฐ์ ์์๋ฅผ 2์ง์๋ก ๋ณํํด ๋ณด๋ฉด $0.01001100110011001\cdots$ ์ด๋ ๊ฒ ์ผ์ ํ ํจํด(1001)์ด ๊ณ์ ๋ฐ๋ณต๋๋๋ฐ ์ด๋ฌํ ์ซ์๋ ๋ฌดํํ ๋ฐ๋ณต๋๋ ์ด์ง ์์๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ด๋ฌํ ๋ฌดํ ์์๋ ์์์ ์๋์ ์ซ์๊ฐ ๋์์ด ๋ฐ๋ณต๋๋ฏ๋ก ์ ํํ 2์ง์ ํํ์ ๊ฐ์ง ์๋๋ค. ์ปดํจํฐ๋ ์ด๋ฌํ ์ ํ์ ์์๋ฅผ ์ ํํ๊ฒ ํํํ๊ฑฐ๋ ๊ณ์ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ทผ์ฟ๊ฐ์ ์ฌ์ฉํด์ ํํํ๋ค.
์ด์ง ์์ → ์ญ์ง์ ๋ณํ
์์์ ์ ๊ฐ์ง๋ ์ด์ง์๋ฅผ ์ญ์ง์๋ก ๋ณํํ๋ ค๋ฉด ์์์ ์ด์ ๊ณผ ์ดํ๋ฅผ ๋ถ๋ฆฌํด์ ๊ณ์ฐํ ๋ค ๋ ๊ฐ์ ํฉ์น๋ฉด ๋๋ค. ์์์ ์ด์ ์ ์ค๋ฅธ์ชฝ๋ถํฐ ๊ฐ ์ด์ง ์๋ฆฟ์์ ํด๋นํ๋ 2์ ๊ฑฐ๋ญ์ ๊ณฑ์($2^{n}$) ๊ณฑํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ ๋ํ๋ค. ์์์ ์ดํ๋ ์ผ์ชฝ๋ถํฐ ๊ฐ ์ด์ง ์๋ฆฟ์์ ํด๋นํ๋ 2์ ์์ ๊ฑฐ๋ญ์ ๊ณฑ์($2^{-n}$) ๊ณฑํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ ๋ํ๋ฉด ๋๋ค.
๊ฐ ์๋ฆฌ์๋ฅผ ๋ํ๋ด๋ n์ ์์์ ์ผ์ชฝ์ 0๋ถํฐ, ์์์ ์ค๋ฅธ์ชฝ์ -1๋ถํฐ ์์ํ๋ค. ์ฐธ๊ณ ๋ก $2^{-n}$ ๊ฐ์ ์์ ์ง์๋ ์ญ์ $\frac{1}{2^{n}}$๊ฐ ๋๋ค. ์ญ์๋ ์ด๋ค ์๋ฅผ ๊ณฑํ์ฌ 1์ ๋ง๋ค ์ ์๋ ์๋ค(์๋ฅผ ๋ค์ด 0.125์ 8์ ๊ณฑํ๋ฉด 1์ด ๋๋ฏ๋ก 0.125๋ 8์ ์ญ์๋ค $8 \times \frac{1}{8}=1$).
$$ \frac{1}{2^{3}} = \frac{2^{0}}{2^{3}}=2^{-3} $$
โถ ๊ณฑ์ ๋ฒ์น (Multiplication Rule) : ๊ฐ์ ๋ฐ์ ์ง์๋ฅผ ๊ณฑํ ๋ ์ง์๋ฅผ ๋ํ๋ค.
$$\begin{align*} a^m \times a^n &= a^{m+n} \\ 2^2 \times 2^3 &= (2 \times 2) \times (2 \times 2 \times 2) \\ &= 2^{2+3} \end{align*}$$
โท ๋๋์ ๋ฒ์น (Division Rule) : ๊ฐ์ ๋ฐ์ ์ง์๋ฅผ ๋๋ ๋ ์์ ์ง์์์ ์๋ ์ง์๋ฅผ ๋บ๋ค.
$$\begin{align*}a^m \div a^n &= a^{m-n} \\2^5 \div 2^3 &= (2 \times 2 \times 2 \times 2 \times 2) \div (2 \times 2 \times 2) \\&= 2^{5-3}\end{align*}$$
โธ ๊ฑฐ๋ญ์ ๊ณฑ์ ๊ณฑ์ ๋ฒ์น (Power of a Product Rule) : ๋ ์์ ๊ณฑ์ ๊ฑฐ๋ญ์ ๊ณฑํ ๋ ๊ฐ ์๋ฅผ ๋ฐ๋ก ๊ฑฐ๋ญ์ ๊ณฑํ์ฌ ๊ณฑํ ์ ์๋ค.
$$\begin{align*}(ab)^n &= a^n \times b^n \\(2 \times 3)^3 &= (2 \times 3) \times (2 \times 3) \times (2 \times 3) \\&= 2^3 \times 3^3\end{align*}$$
โน ๊ฑฐ๋ญ์ ๊ณฑ์ ๊ฑฐ๋ญ์ ๊ณฑ ๋ฒ์น (Power of a Power Rule) : ๊ฑฐ๋ญ์ ๊ณฑ์ ๋ค์ ๊ฑฐ๋ญ์ ๊ณฑํ ๋ ์ง์๋ฅผ ๊ณฑํ๋ค.
$$\begin{align*}(a^m)^n &= a^{mn} \\(2^2)^3 &= 2^2 \times 2^2 \times 2^2 \\&= 2^{2 \times 3}\end{align*}$$
์ปดํจํฐ์์ ์ค์ ํํ
์ปดํจํฐ๊ฐ ์ค์๋ฅผ ํํํ๋ ๋ฐฉ์์ ๋ํ์ ์ผ๋ก โถ๊ณ ์ ์์์ (Fixed-Point Number Representation) ๋ฐฉ์๊ณผ โท๋ถ๋ ์์์ (Floating-Point Number Representation) ๋ฐฉ์์ผ๋ก ๋๋ ์ ์๋ค.
๊ณ ์ ์์์ ๋ฐฉ์ Fixed-Point
๊ณ ์ ์์์ ๋ฐฉ์์ ์ด๋ฆ์์ ์ ์ ์๋ฏ ์์์ ์ ์์น๋ฅผ ๊ณ ์ ์ํค๋ ๋ฐฉ๋ฒ์ผ๋ก, ์ ์๋ถ์ ์์๋ถ์ ํ ๋น๋๋ ๋นํธ์ ์๊ฐ ์ ํด์ ธ ์๋ค. ์ด๋ ์ ์์ ์์์ ํํ ๋ฒ์๊ฐ ๋ฏธ๋ฆฌ ์ง์ ๋์ด ์์์ ์๋ฏธํ๋ค. ์ด ํน์ฑ์ผ๋ก ์ธํด ์์ฃผ ์๊ฑฐ๋ ํฐ ์์ ํํ์๋ ์ ์ฝ์ด ๋ฐ๋ฅด๋ฉฐ, ํ์ํ์ง ์์ ๊ณต๊ฐ๊น์ง ๋นํธ ํ ๋น์ด ์ด๋ฃจ์ด์ ธ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋ฐ์ํ ์ ์๋ค.
๊ณ ์ ์์์ ๋ฐฉ์์์ ์ ์์ ์์์ ๋นํธ ์๋ ์์คํ ์ด๋ ์ดํ๋ฆฌ์ผ์ด์ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ค. ์๋ฅผ ๋ค์ด, 32๋นํธ ์์คํ ์์๋ ์ฒ์ 1๋นํธ๋ฅผ ๋ถํธ๋ก ์ฌ์ฉํ๊ณ , ๋๋จธ์ง 31๋นํธ๋ฅผ ์ ์๋ถ์ ์์๋ถ๋ก ๋๋ ์ ์ฌ์ฉํ๋ค.
๐ก 32๋นํธ ์์คํ ์ CPU๊ฐ 32๋นํธ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํ ๋นํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค. ์ฐธ๊ณ ๋ก 32๋นํธ ์์คํ ์ 2^32๊ฐ์ ์ ์ผํ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ์ง ์ ์๋ค. ์ด๋ ์ต๋ 4GB์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ณต๊ฐ์ ์๋ฏธํ๋ค.
- ์ฒ์ 1๋นํธ : ๋ถํธ(sign). ์์๋ 0, ์์๋ 1
- ๋ค์ 15๋นํธ : ์ ์๋ถ(integer part, ๆดๆฐ)
- ๋ค์ 16๋นํธ : ์์๋ถ(fractional part, ๅฐๆฐ)
10์ง์ 68.625๋ฅผ 32๋นํธ ๊ณ ์ ์์์ ์ผ๋ก ํํํ๋ฉด ์๋์ ๊ฐ๋ค. 10์ง์๋ฅผ 2์ง์๋ก ๋ณํํ ๊ฒฐ๊ด๊ฐ์ ๊ฐ๊ฐ ์ ์๋ถ์ ์์๋ถ์ ๋ฃ์ ํ, ๋จ์ ๋ถ๋ถ์ 0์ผ๋ก ์ฑ์ฐ๋ฉด ๋๋ค
์ด์ฒ๋ผ ๊ณ ์ ์์์ ๋ฐฉ์์ ํํ ๋ฐฉ๋ฒ์ด ๋จ์ํ๊ณ ์๋๊ฐ ๋น ๋ฅด์ง๋ง ์ ์๋ถ์ ์์๋ถ์ ์ฌ์ฉํ๋ ๋นํธ๊ฐ ๊ณ ์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ํฐ ์ค์๋ฅผ ํํํ๊ธฐ ์ด๋ ค์ด ๋จ์ ์ด ์์ด ํน๋ณํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณค ์ ์ฐ์ด์ง ์๋๋ค.
๋ถ๋ ์์์ ๋ฐฉ์ Floating-Point
๋ถ๋(ๆตฎๅจ) ์์์ ๋ฐฉ์์ ์์์ ์ ์์น๋ฅผ ์ ๋์ ์ผ๋ก ์กฐ์ ํ์ฌ ์ค์๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ด ๋ฐฉ์์ ๊ณ ์ ์์์ ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ ์ค์์ ์ ๋ฐ๋์ ๋ฒ์๋ฅผ ์ ์ฐํ๊ฒ ์กฐ์ ํ ์ ์์ด ๋ค์ํ ํฌ๊ธฐ์ ์๋ฅผ ํํํ ์ ์๋ค. ๋๋ถ๋ถ์ ์์คํ ์์ ๋ถ๋ ์์์ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์๋ค.
๋ถ๋ ์์์ ๋ฐฉ์์์ ์ซ์๋ฅผ ๊ฐ์๋ถ(mantissa; ๅฐพๆฐ)์ ์ง์๋ถ(exponent; ๆๆฐ) ๋ ๋ถ๋ถ์ผ๋ก ๋๋์ด ํํํ๋ค. ๊ฐ์๋ถ์๋ ์ ํจ ์ซ์๋ฅผ ๋ํ๋ด๋ ๋นํธ๊ฐ ๋ค์ด๊ฐ๊ณ , ์ง์๋ถ์๋ ์์์ ์ ์์น๋ฅผ ๋ํ๋ด๋ ์ง์๊ฐ ๋ค์ด๊ฐ๋ค.
๐ก ์ค์ผ์ผ ํฉํฐ(Scale Factor)๋ ์ด๋ค ๊ฐ์ด๋ ๋ฐ์ดํฐ๋ฅผ ํ๋/์ถ์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์์น๋ก ๋ถ๋ ์์์ ์์ ์ง์๋ถ๊ฐ ์ด ์ญํ ์ ์ํํ๋ค. ์ด๋ฅผ ํตํด ๋ค์ํ ํฌ๊ธฐ์ ์๋ฅผ ํํํ ์ ์๋ค.
๋ถ๋ ์์์ ๋ฐฉ์์ ์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๋ด์์ ๋ ๋์ ์์ ๋ฒ์๋ฅผ ํํํ ์ ์๊ฒ ํด ์ฃผ์ง๋ง, ์ฌ์ ํ ์ ํํ ๋นํธ ์๋ก ์ธํด ์ ํ๋์ ํ๊ณ๊ฐ ์กด์ฌํ๋ค. ๋ฏธ๊ตญ์ ๊ธฐ์ ์ํํ(IEEE)๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด IEEE 754 ํ์ค์ ์ ์ ํ์ฌ ๋ถ๋ ์์์ ์ฐ์ฐ์ ํจ์จ์ฑ์ ๋์ด๊ณ ์ ๋ฐ๋๋ฅผ ํฅ์์์ผฐ๋ค. IEEE 754 ํ์ค์์ ์๋ ๋ค ๊ฐ์ง ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ์ค์๋ฅผ ๋ถ๋ ์์์ ๋ฐฉ์์ผ๋ก ๋ณํํ๋ค.
- 2์ง์ ์ ๊ทํ(normalize)
์์์ ์ ์ผ์ชฝ์ผ๋ก ์ด๋์์ผ ๊ฐ์๋ถ๊ฐ 1๋ก ์์ํ๋๋ก ๋ง๋ ๋ค - ๋ถํธ(sign) ํ๊ธฐ
์ฒซ ๋ฒ์งธ ๋นํธ์ ๋ถํธ๋ฅผ ํ๊ธฐํ๋ค. ์์๋ 0, ์์๋ 1๋ก ํ๊ธฐํ๋ค - ์ง์๋ถ(exponent) ํ๊ธฐ
๋ค์ 8๋นํธ์ ์ ๊ทํ ๊ณผ์ ์์ ์ป์ ์ง์์ bias๋ฅผ ๋ํ ๊ฐ์ ํ๊ธฐํ๋ค - ๊ฐ์๋ถ(mantissa) ํ๊ธฐ
๋ค์ 23๋นํธ์ ์์๋ถ๋ฅผ ๊ฐ์ผ๋ก ํ๊ธฐํ๋ค
IEEE 754 ๋ถ๋ ์์์ ํ์ค์ 32๋นํธ ๋จ์ ๋(๊ธฐ๋ณธ ์ ๋ฐ๋, Single-Precision)์ 64๋นํธ ๋ฐฐ์ ๋(2๋ฐฐ ์ ๋ฐ๋, Double-Precision) ์ด ๋ ๊ฐ์ง๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ค.
๊ณ ์ ์์์ ๋ฐฉ์์ ์ผ๋ฐ์ ์ผ๋ก ์ ์๋ถ 15๋นํธ์ ์์๋ถ 16๋นํธ๋ก ๊ตฌ์ฑ๋์ง๋ง, ๋ถ๋ ์์์ ๋ฐฉ์์ 23๋นํธ์ ๊ฐ์๋ถ๋ก ์ค์๋ฅผ ํํํ๋ค. ์ฆ, ๋ถ๋ ์์์ ์ ๊ฐ์๋ถ๋ง์ผ๋ก ์ค์ ํํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ์ฅ ํจ์จ์ด ๋ ๋๊ณ , ๊ณ ์ ์์์ ์ด ๊ฐ์ง ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
์ง์ํ๊ธฐ๋ฒ Exponential Notation
๐ก ๋ถ๋ ์์์ ์ ์ด์ง์ ๊ธฐ๋ฐ์ด์ง๋ง ์๋ ์ค๋ช ์ ์ง์ํ๊ธฐ๋ฒ์ ์ดํด๋ฅผ ์ํด 10์ง์๋ฅผ ์ฌ์ฉํ๋ค.
๋ถ๋ ์์์ ๋ฐฉ์์ ์ซ์๋ฅผ ๊ฐ์๋ถ์ ์ง์๋ถ ๋ ๋ถ๋ถ์ผ๋ก ๋๋ ์ ํํํ๋ค๊ณ ํ๋ค. ์ด๋ฅผ ์ง์ํ๊ธฐ๋ฒ์ด๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ ํฐ ์๋ ์์ ์๋ฅผ ๊ฐํธํ๊ฒ ํํํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด๋ค. ์ง์ํ๊ธฐ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ ํํ๋ฅผ ๊ฐ์ง๋ค.
$$a \times 10^b$$
- ๊ฐ์๋ถ(a) : ์ซ์์ ์ค์ง์ ์ธ ๊ฐ์ ๋ํ๋ธ๋ค. ๊ฐ์๋ถ๋ ์ฃผ๋ก 1 ์ด์ 10 ๋ฏธ๋ง์ ์๋ก ํํํ๋ค.
- ์ง์๋ถ(b) : 10์ ๊ฑฐ๋ญ์ ๊ณฑ์ผ๋ก ํํํ์ฌ ์ซ์๊ฐ ์ผ๋ง๋ ํฌ๊ฑฐ๋ ์์ ์ง๋ฅผ ๋ํ๋ธ๋ค.
์ด์ ์ ์ฌํ๊ฒ ์ด์ง์์์ ์ง์ํ๊ธฐ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด ํํํ ์ ์๋ค. ๊ฐ์๋ถ(a)๋ ์ด์ง์๋ก ํํ๋๊ณ , ์ง์๋ถ(b)๋ ์์์ ์ ์์น๋ฅผ ๊ฒฐ์ ํ๋ค.
$$a \times 2^b$$
์๋๋ 123.456์ ๋ํ ๋ค์ํ ์ง์ํ๊ธฐ ์์. ์์์ ์ ์ผ์ชฝ ํน์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๊ณ ์ด๋ํ ํ์๋งํผ ์ง์๋ก ํํํ๋ ๋ฐฉ์์ด๋ค. ์๋ฅผ ๋ค์ด ์์์ ์ ์ผ์ชฝ์ผ๋ก ๋ ๋ฒ ์ด๋ํ๋ค๋ฉด ์ง์๋ 10²๊ฐ ๋๊ณ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ ๋ฒ ์ด๋ํ๋ค๋ฉด ์ง์๋ 10โป²๊ฐ ๋๋ค.
$$\begin{align*}123.456 &= 1.23456 \times 10^2 \\&= 12.3456 \times 10^1 \\&= 1234.56 \times 10^{-1} \\&= 12345.6 \times 10^{-2}\end{align*}$$
ํ๋ก๊ทธ๋๋ฐ์ด๋ ๊ณ์ฐ๊ธฐ์์ e
(exponent)๋ฅผ ์ฌ์ฉํด์ ์ง์๋ฅผ ๋ํ๋ผ ์๋ ์๋ค. e
๋ค์ ์ค๋ ์ซ์๋ ์ผ๋ฐ์ ์ผ๋ก 10์ง์์ ๊ฑฐ๋ญ์ ๊ณฑ์ ๋ํ๋ด๋ฉฐ, e
๋ค์ +
๊ธฐํธ๋ฅผ ๋ถ์ด๊ฑฐ๋ ์๋ตํ ์ ์๋ค(ํฌ๋กฌ ์ฝ์์ 1e1
ํน์ 1e+1
์ ์
๋ ฅํด ๋ณด๋ฉด ๋ชจ๋ 10์ ์ถ๋ ฅํ๋ค).
$$\begin{align*}1000 &= 1 \times 10^3 = 1e3 \\5000000 &= 5 \times 10^6 = 5e6 \\0.01 &= 1 \times 10^{-2} = 1e-2 \\0.000005 &= 5 \times 10^{-6} = 5e-6\end{align*}$$
์ ๊ทํ Normalize
์ ๊ทํ๋ ์ฃผ์ด์ง ์๋ฅผ ํ์ค ํ์์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ ์๋ฏธํ๋ค. ์ฃผ๋ก ์์์ ์ ์์น๋ฅผ ์กฐ์ ํจ์ผ๋ก์จ ์ด๋ค์ง๋ค. ์ด์ง์์์ ์ ๊ทํ๋ ์ฃผ์ด์ง ์๋ฅผ $1.f\times 2^{n}$ ํํ๋ก ํ๊ธฐํ๋ค. ์ฌ๊ธฐ์ $1.f$๋ ์ ๊ทํ๋ ๊ฐ์(mantissa)์ด๊ณ , $2^n$์ ์ง์(exponent)๋ฅผ ๋ํ๋ธ๋ค. $f$๋ ์์๋ถ(fractional part)๋ฅผ ์๋ฏธํ๋ฉฐ, ์์์ ์ดํ์ ๋นํธ๋ฅผ ๋ํ๋ธ๋ค. ์ด ๋นํธ๋ค์ 0๊ณผ 1๋ก ๊ตฌ์ฑ๋์ด ์์์ ์๋ ๊ฐ์ ํํํ๋ค.
์ง์ ํ๊ธฐ๋ฒ๊ณผ ์ ์ฌํด ๋ณด์ด์ง๋ง ์ด์ง์๋ก ๋ณํํ ๋ค ์์์ ์ ์ด๋์์ผ ๊ฐ์๋ถ์ ๋งจ ์์๋ฆฌ๊ฐ ํญ์ 1์ด ๋๋๋ก ์กฐ์ ํ๋ ์ ์ด ๋ค๋ฅด๋ค. ์ด๋ ์ด์ง์ ํน์ฑ์ $1.f$ ํํ๋ก ๋ํ๋ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
10์ง์ 68.625๋ฅผ ์ ๊ทํํด ๋ณด๋ฉด…
- 2์ง์ ๋ณํ : $1000100.101$
- ์์์ ์ด๋ : ์์๋ฆฌ๊ฐ 1์ด ๋๋๋ก ์์์ ์ ์ฎ๊ฒจ์ค๋ค → $1.000100101$
- ์ง์๋ถ ๊ตฌ์ฑ : ์์์ ์ด๋ ํ์(6)๋ฅผ ์ง์๋ก ์ฌ์ฉํ๋ค → $2^6$
- ์ ๊ทํ ์์ฑ : $1.000100101\times2^6$
์ง์๋ถ Exponent
๐ก ์ซ์์ ์ง์๋ฅผ ํํํ ๋ ์๋ ์ฒจ์(subscript)๋ฅผ ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด 127์ด๋ผ๋ ์ซ์๊ฐ ์ญ์ง์์์ ๋ํ๋ผ ๋ 127 ์ฐ์ธก์ โโ ์๋์ฒจ์๋ฅผ ๋ถ์ฌ์ 127โโ ํ๊ธฐํ๋ค(127โโโโ ์๊ดํธ๋ก ๊ฐ์ธ์ ํ๊ธฐํ ์๋ ์๋ค).
32๋นํธ IEEE 754 ํ์ค์์ ์ค์๋ฅผ ํํํ ๋ ์ง์๋ถ์ $127_{10}$ ์ซ์๋ฅผ ๋ํ ๊ฐ์ผ๋ก ์ฑ์์ผ ํ๋ค. ์ด 127 ์ซ์๋ bias๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์๋ฅผ ๋ค์ด $68.625_{10}$์ ์ด์ง๋ฒ ํํ์์ ์ง์ ๊ฐ์ด 6์ด๋ผ๋ฉด ์ด ๊ฐ์ 127์ ๋ํ ํ ๋ค์ ์ด์ง์๋ก ๋ณํํด์ ์ง์๋ถ๋ฅผ ์ฑ์์ผ ํ๋ค.
- 68.625๋ฅผ ์ด์ง์๋ก ๋ณํ : $1000100.101$
- ์์์ ์์๋ฆฌ๊ฐ 1์ด ๋๋๋ก ์์์ ์ด๋ : $1.000100101$
- ์์์ ์ ์ด๋ํ ํ์๋งํผ ์ง์๋ก ์ฌ์ฉ : $6$
- ํ๋ํ ์ง์์ bias(127) ๋ํ๊ธฐ : $127+6=133$
- ๋ํ ๊ฐ 133์ ๋ค์ ์ด์ง์๋ก ๋ณํ : $10000101$
bias ๊ฐ์ ๋ํ๋ ์ด์ ๋ ์ง์๊ฐ ์์์ผ ๋๋ฅผ ๋๋นํ๊ธฐ ์ํจ์ด๋ค. $0.078125_{10}$๋ฅผ ์๋ก ๋ค์ด๋ณด์. $0.078125_{10}$์ ์ด์ง์๋ $0.000101$ ์ด๊ณ ์ด๋ฅผ ์ ๊ทํํ๋ฉด $1.01\times2^{-4}$๊ฐ ๋๋ค. ์ง์๋ $-4$๋ก ์์๊ฐ ๋์๋ค.
์ง์๋ถ์ ์์์ ์์๋ฅผ ๋ํ๋ด๊ธฐ ์ํด 1๋นํธ๋ฅผ ๋ถํธ(sign) ๊ฐ์ผ๋ก ํ ๋นํ ์ ์์ง๋ง, ํํํ ์ ์๋ ๊ฐ์ ๋ฒ์๊ฐ ์ค์ด๋๋ ๋จ์ ์ด ์๋ค. IEEE 754 ํ์ค์์ 8๋นํธ๋ก ์์์ ์์๋ฅผ ๋ชจ๋ ํํํ๊ธฐ ์ํด bias๋ผ๋ ๊ฐ์ ๋์ ํ๋ค.
8๋นํธ ์ง์๋ถ๋ $2^8=256$๊ฐ์ ์ซ์๋ฅผ ํํํ ์ ์๋๋ฐ(0~255) ์ด ์ง์๋ถ ๋ฒ์์ ์ ๋ฐ ์ง์ ์ธ 127(์ญ์ง์)์ ๊ธฐ์ค์ผ๋ก ์์์ ์์๋ฅผ ๊ตฌ๋ถํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๊ณ์ฐ๋ ์ง์์ bias๋ฅผ ๋ํ ๊ฐ์ด bias ๋ณด๋ค ์์ผ๋ฉด ์์, bias๋ณด๋ค ํฌ๋ฉด ์์๋ก ํ๋ณํ๋ค.
- 0~127 ๊ตฌ๊ฐ : ์์ (์ ์ฅ๋ ์ง์๊ฐ 100์ด๋ผ๋ฉด ์์์ด๊ณ , ์ค์ ์ง์๋ $100-127=-27$)
- 128~255 ๊ตฌ๊ฐ : ์์ (์ ์ฅ๋ ์ง์๊ฐ 130์ด๋ผ๋ฉด ์์์ด๊ณ , ์ค์ ์ง์๋ $130-127=3$)
๐ก ์ง์๊ฐ 0($00000000_{2}$)๊ณผ 255($11111111_{2}$)๋ ํน๋ณํ ๊ฐ์ ๋ํ๋ด๊ธฐ ์ํด ๋ฏธ๋ฆฌ ์์ฝ๋์ด ์๋ค. ๋งค์ฐ ์์ ๊ฐ์ ํํํ ๋ 0์ ์ฌ์ฉํ๊ณ , Infinity ํน์ NaN์ 255๋ฅผ ์ฌ์ฉํ๋ค.
๊ฐ์๋ถ Mantissa
๊ฐ์๋ถ๋ ๊ณ ์ ์์์ ์์ ์์๋ถ(fractional part) ๊ฐ์ ์ญํ ์ ํ๋ค. ์ ๊ทํ ๊ฒฐ๊ณผ์ ์์ ๋ถ๋ถ(์์์ ์ค๋ฅธ์ชฝ)์ ๊ฐ์๋ถ ์๋ฆฌ์ ๋ฃ๊ณ ๋จ๋ ์๋ฆฌ๋ 0์ผ๋ก ์ฑ์์ฃผ๋ฉด ๋๋ค.
์๋ฅผ ๋ค์ด $68.625_{10}$์ ์ ๊ทํ ๊ฒฐ๊ณผ๊ฐ $1.000100101_{2}\times2^6$ ์ด๋ผ๋ฉด ์์์ ์ค๋ฅธ์ชฝ์ ์๋ $000100101$ ์ซ์๋ฅผ ๊ฐ์๋ถ์ ๋ฃ๊ณ ๋จ์ ๋ถ๋ถ์ 0์ผ๋ก ์ฑ์ฐ๋ฉด ๋๋ค.
์ค์ ์์
$68.625_{10}$ ์ซ์๋ฅผ 32๋นํธ IEEE 754 ๋ถ๋ ์์์ ์ผ๋ก ํํํด ๋ณด๋ฉด ์๋์ ๊ฐ๋ค. $68.625_{10}$๋ ์์์ด๋ฏ๋ก ์์ ๋ถ๋ถ์ธ ๋ถํธ ๋นํธ์ 0์ ์ ๋ ฅํ๋ค.
- 2์ง์ ๋ณํ : $1000100.101_{2}$
- ์ ๊ทํ : $1.000100101_{2}\times2^6$
- ์ง์๋ถ : $6_{10}+127_{10}(bias)=133_{10}=10000101_{2}$
- ๊ฐ์๋ถ : $000100101_{2}$
๋ถ๋ ์์์ ์ ํ๊ณ
32๋นํธ ๊ณ ์ ์์์ ์ ์ ์๋ถ์ 15๊ฐ ๋นํธ๋ฅผ ํ ๋นํ์ฌ ์ต๋ $2^{15}=32768$ ๊ฐ์ ์ ์๋ฅผ ํํํ ์ ์๋ค.
ํํธ 32๋นํธ ๋ถ๋ ์์์ ์์ ์ง์๋ถ์ 8๋นํธ๋ฅผ ํ ๋นํ๋ค. 8๋นํธ๋ฅผ ์ฑ์ธ ์ ์๋ ๊ฐ์ฅ ํฐ ์๋ $11111111_{2}$ ์ด์ง๋ง, ์ด๋ ๋ฌดํ๋๋ฅผ ๋ํ๋ด๋ ๋ฏธ๋ฆฌ ์์ฝ๋ ๊ฐ์ด๋ฏ๋ก ์ค์ ์ต๋๊ฐ์ $11111110_{2}$($254_{10}$)์ด๋ค. ์ฌ๊ธฐ์ ๋ฐ์ด์ด์ค(bias) $127_{10}$์ด ํฌํจ๋์ด ์์ผ๋ฏ๋ก ์ด ๊ฐ์ ๋นผ๊ณ ์ฌ์ฉํ ์ ์๋ ์ต๋ ์ง์๋ $254-127=127$์ด ๋๋ค. ๋ฐ๋ผ์ 32๋นํธ ๋ถ๋ ์์์ ์์ ํํํ ์ ์๋ ๊ฐ์ฅ ํฐ ์์ ์ ๊ทํ๋ ํํ๋ $1.f\times2^{127}$์ด๋ค. ๊ณ ์ ์์์ ๊ณผ ๋น๊ตํ๋ฉด ํจ์ฌ ๋์ ๋ฒ์์ ์๋ฅผ ํํํ ์ ์์์ ์๋ฏธํ๋ค.
ํ์ง๋ง ๋ถ๋ ์์์ ์ ์ค์ ์ฐ์ฐ์ ์ ํ๋๋ฅผ ๋ณด์ฅํ์ง ์๋ ๋จ์ ์ด ์๋ค. ๊ณ ์ ์์์ ์์ ์์์ ์ ์์น๊ฐ ๋ณ๊ฒฝ๋์ง ์๊ธฐ ๋๋ฌธ์ ์์์ ์ดํ์ ์ ๋ฐ๋๊ฐ ์ผ์ ํ๊ฒ ์ ์ง๋์ง๋ง, ํํํ ์ ์๋ ์์ ๋ฒ์๊ฐ ํ์ ๋์ด ์๋ค. ๋ฐ๋ฉด, ๋ถ๋ ์์์ ์ ์์์ ์ ์์น๋ฅผ ์ ๋์ ์ผ๋ก ์กฐ์ ํจ์ผ๋ก์จ ๋ ๋์ ๋ฒ์์ ์๋ฅผ ํํํ ์ ์์ง๋ง, ๊ฐ์๋ถ์ ์ง์๋ถ์ ํ ๋น๋ ๋นํธ ์์ ์ ํ์ผ๋ก ์ ๋ฐ๋์ ์ ์ฝ์ด ์๊ธด๋ค.
์๋ฅผ ๋ค์ด ์ญ์ง์ 0.3์ ์ด์ง์๋ก ๋ณํํ๋ฉด $0.01001100110011001\cdots$ ๊ณผ ๊ฐ์ด 1001์ด ๋ฌดํ ๋ฐ๋ณต๋๋ ์ด์ง ์์๊ฐ ๋๋ค. ์ปดํจํฐ๋ ์ด๋ฌํ ๋ฌดํ ์์๋ฅผ ํํํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์๋ถ ๋ง์ง๋ง ๋นํธ ์ดํ์ ๊ฐ์ ๋ฐ์ฌ๋ฆผํ๊ฑฐ๋ ์ ์ญ(๋ฒ๋ฆผ) ์ฒ๋ฆฌํ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ค์ ์ปดํจํฐ์ ์ ์ฅ๋๋ ๊ฐ์ 0.3์ด ์๋ ๊ทผ์ฟ๊ฐ์ด ๋๋ ๊ฒ์ด๋ค.
๐ก Python์ round ํจ์๋ Round to Nearest, Ties to Even ๋ฐฉ์์ ์ฑํํด์ 2.5๋ 2๋ก, 3.5๋ 4๋ก ๋ฐ์ฌ๋ฆผ๋๋ค. Javascript์ round ํจ์๋ Round to Nearest, Ties to Away ๋ฐฉ์์ผ๋ก 2.5๋ 3์ผ๋ก, 3.5๋ 4๋ก ๋ฐ์ฌ๋ฆผ๋๋ค. ์ด๋ ์ฐ๋ฆฌ๊ฐ ์ผ์์์ ์ฌ์ฉํ๋ ์ฌ์ฌ์ค์ (ๅ่ไบๅ ฅ) ๋ฐฉ์๊ณผ ๋์ผํ๋ค.
IEEE 754 ํ์ค์์ ์ ํ๋ ๋นํธ๋ก ์๋ต๋๋ ๊ฐ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด 5๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ์ํ๋๋ฐ, ๊ทธ์ค ์ง์๋ก ๋ฐ์ฌ๋ฆผ(Round to Nearest, Ties to Even; ๋ฑ ํฌํ ๋ฐ์ฌ๋ฆผ)์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ค. ๋ฐ์ฌ๋ฆผํ ์๋ฆฌ์ ์๊ฐ 5์ด๊ณ (์ค๊ฐ๊ฐ), ๊ทธ ๋ค์ ์ด๋ค ์ซ์๋ ์ค์ง ์๊ฑฐ๋ ๋ชจ๋ 0์ผ ๋, ์์๋ฆฌ ์ซ์๊ฐ ์ง์๋ฉด ๋ด๋ฆผํ๊ณ ํ์๋ฉด ์ฌ๋ฆผํ๋ ๋ฐฉ์์ด๋ค(๊ฐ์ฅ ๊ฐ๊น์ด ์ง์๋ก ๋ฐ์ฌ๋ฆผ). ์๋ ์์์ ๋ง์ง๋ง ์์์ ์ ๋ฐ์ฌ๋ฆผํ๋ค๋ฉด…
- 4.5 → 4 : ๋ฐ์ฌ๋ฆผํ ์๋ฆฌ์ ์๊ฐ 5์ด๊ณ , ๊ทธ ์์ ์ซ์(4)๊ฐ ์ง์์ด๋ฏ๋ก ๋ด๋ฆผ
- 5.4 → 5 : ๋ฐ์ฌ๋ฆผํ ์๋ฆฌ์ ์๊ฐ 4์ด๋ฏ๋ก ์ผ๋ฐ์ ์ธ ๋ฐ์ฌ๋ฆผ ๊ท์น์ ๋ฐ๋ผ ๋ด๋ฆผ
- 0.125 → 0.12 : ๋ฐ์ฌ๋ฆผํ ์๋ฆฌ์ ์๊ฐ 5์ด๊ณ , ๊ทธ ์์ ์ซ์(2)๊ฐ ์ง์์ด๋ฏ๋ก ๋ด๋ฆผ
0.1 + 0.2
๊ทผ์ฟ๊ฐ ๊ณ์ฐํด ๋ณด๊ธฐ
0.1 + 0.2; // 0.30000000000000004
0.1 + 0.2 === 0.3; // false
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ์ซ์๋ 64๋นํธ ๋ถ๋ ์์์ ํ์(IEEE 754 ํ์ค)์ผ๋ก ํํํ๋ค. ์ฝ์์ 0.1์ ์ ๋ ฅํ๋ฉด ์ด๋ฅผ IEEE 754 ํ์ค ํ์์ ๋ฐ๋ผ 2์ง์๋ก ๋ฐ๊พธ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ 10์ง์๋ก ๋ฐ๊ฟ์ ํ๋ฉด์ ํ์ํ๋ ๊ฒ์ด๋ค.
์์์ ์ดํด๋ดค๋ฏ IEEE 754 ํ์ค์ 2์ง์ ํ์์ ์ฌ์ฉํ์ฌ ์ซ์๋ฅผ ํํํ๋ฏ๋ก ์ผ๋ถ ์ซ์๋ ์ ํํ๊ฒ ํํํ ์ ์๋ค. ์๋ฅผ ๋ค์ด 0.1๊ณผ 0.2๋ฅผ 2์ง์๋ก ๋ณํํด ๋ณด๋ฉด ๋ ๋ค ์์์ ์ด ๋ฌดํ ๋ฐ๋ณต๋๋ฏ๋ก ์ ํํ 2์ง์๋ก ํํํ ์ ์๋ ์ซ์๋ค. ์ด๋ฌํ ๋ฌดํ ์์๋ค์ ๋นํธ์ ์ ํ์ผ๋ก ์ธํด ๊ทผ์ฟ๊ฐ์ผ๋ก ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์ค์ฐจ๊ฐ ๋ฐ์ํ๋ค.
- 0.1๊ณผ 0.2๋ฅผ 2์ง์๋ก ๋ณํํ๋ค
- ๋ ์๋ฅผ ๋ถ๋ ์์์ ์ผ๋ก ํ๊ธฐํ๊ธฐ ์ํด ๋ฐ์ฌ๋ฆผ ํ ๊ทผ์ฟ๊ฐ์ผ๋ก ์ ์ฅํ๋ค
- ๋ ์์ ๊ทผ์ฟ๊ฐ์ ํฉ์ฐํ๋ค
- ํฉ์ฐํ ๊ทผ์ฟ๊ฐ์ ๋ค์ 10์ง ์๋ก ๋ณํํ๋ค
โ ๏ธ ๋ฐ์ฌ๋ฆผ์ IEEE 754 ํ์ค์ Round to Nearest, Ties to Even ๋ฐฉ์์ ์ ์ฉํด์ผ ํ๋ค
0.1 + 0.2์ ์ด์ง ๊ทผ์ฟ๊ฐ์ ๋ค์ 10์ง์๋ก ๋ณํํ๋ ์์ โผ
// 0.1 + 0.2์ ์ด์ง ํํ (2์ง์ ๋ฌธ์์ด)
const binaryString = '0100110011001100110011001100110011001100110011001100111';
const base = 2;
const power = -55;
const parsedInt = parseInt(binaryString, base);
const result = parsedInt * Math.pow(2, power);
console.log(result); // 0.30000000000000004
๐ Math.pow(2, -n)
์ $2^{-n}$ ์์ ์ง์์ด๋ฏ๋ก ์ด๋ ์ญ์ $\frac{1}{2^{n}}$๊ณผ ๋์ผํ๋ค. 0.5๋ก n๋ฒ ๊ณฑํ๋(๋๋๊ธฐ 2๋ฅผ n๋ฒ ๋ฐ๋ณต) ๊ณ์ฐ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. ์ฆ, ์ ์ฝ๋๋ parseInt()
์ฒซ ๋ฒ์งธ ์ธ์์ ์ฃผ์ด์ง ์ด์ง์๋ฅผ ์ญ์ง์๋ก ๋ณํํ ํ 0.5๋ก ๊ณฑํ๋ ์์
์ 55๋ฒ ์ํ(๋๋๊ธฐ 2๋ฅผ 55๋ฒ ๋ฐ๋ณต) ํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
๋ํ parseInt()
๋ฅผ ํตํด 10์ง์๋ก ๋ณํํ ๋ ์์์ ์ ์ฒ๋ฆฌํ์ง ์๋๋ค. ๋๋ฌธ์ ์ด์ง์์ ์์๋ถ๋ง ๋ฐ๋ก ๋ถ๋ฆฌํด์ ๊ฐ์ค์น๋ฅผ ๊ณฑํ๋ ๋ฐฉ์์ผ๋ก ๊ณ์ฐํ๋ ๊ฒ. ์๋ฅผ ๋ค์ด ์ด์ง์ 0.101์ ์์๋ถ๋ฅผ 10์ง์๋ก ๋ณํํ ๋ 1๋ฒ์งธ ์์์ ์ $\frac{1}{2^{1}}=0.5$, 2๋ฒ์งธ ์์์ ์ $\frac{1}{2^{2}}=0.25$, 3๋ฒ์งธ ์์์ ์ $\frac{1}{2^{3}}=0.125$์ ๊ฐ์ค์น๋ฅผ ๊ฐ์ง๋ค.
๐ toString()
๋ฉ์๋๋ฅผ ์ด์ฉํด ํน์ ์ซ์์ ์ด์ง ๊ทผ์ฟ๊ฐ์ ํ์ธํด ๋ณผ ์ ์๋ค.
(0.1).toString(2); // 0.000110011... -> 0.1์ ์ด์ง ๊ทผ์ฌ๊ฐ
(0.2).toString(2); // 0.0011001100... -> 0.2์ ์ด์ง ๊ทผ์ฌ๊ฐ
์์ ํ ์ ์์ ๋ฒ์
64๋นํธ IEEE 754 ํ์ค์์(๋ฐฐ์ ๋ฐ๋ ๋ถ๋์์์ ) ๊ฐ์๋ถ(์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณณ)๋ 52๋นํธ๋ก ์ด๋ฃจ์ด์ ธ ์์ด $2^{52}$๊ฐ์ ์๋ก ๋ค๋ฅธ ์ ์๋ฅผ ํํํ ์ ์๋ค. ๋ฐฐ์ ๋ฐ๋ ๊ฐ์๋ถ ํ๋๋ $1.f$ ํํ๋ก ํญ์ ์จ๊ฒจ์ง ๋นํธ 1์ ํฌํจํ๊ธฐ ๋๋ฌธ์ ์ค์ง์ ์ผ๋ก $2^{53}$๊น์ง ์ ์ ๊ฐ์ ๊ตฌ๋ณํ ์ ์๋ค. ์์์ ์์๋ฅผ ๋ชจ๋ ํฌํจํ๋ฉด $-(2^{53}-1)$์์ $2^{53}-1$๊น์ง๊ฐ ํํํ ์ ์๋ ์ ์ ๋ฒ์๊ฐ ๋๋ค. ์ด ๋ฒ์ ๋ด์์ ์ ๋ฐ๋ ์์ค ์์ด ๋ถ๋์์์ ์ฐ์ฐ์ ์ํํ ์ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ES6์๋ ์์ ํ ์ ์ ๋ฒ์๋ฅผ ๋ํ๋ด๋ ์์๋ ์ ๊ณตํ๋ค. ์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ์๊ฐ ๋ถ์ ํํ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ฏ๋ก ์ฃผ์ํ์.
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991 = 2^53 - 1
console.log(Number.MIN_SAFE_INTEGER); // -9007199254740991 = -(2^53 - 1)
๐ $2^{53}-1$์์ 1์ ์ ๋นผ๋ ๊ฑธ๊น? 3๋นํธ๋ง ์ฌ์ฉํด์ ์ซ์๋ฅผ ์ ์ฅํ๋ค๊ณ ๊ฐ์ ํด ๋ณด์. 3๋นํธ์์ ํํํ ์ ์๋ ๊ฐ์ฅ ํฐ ์ซ์๋ $111_{2}$์ด๊ณ 10์ง์๋ก ๋ณํํ๋ฉด 7์ด ๋๋ค. $2^{3}-1$๊ณผ ๋์ผํ ๊ฐ์ด๋ค. 4๋นํธ๋ง ์ฌ์ฉํ ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ค. $1111_{2}$๋ฅผ 10์ง์๋ก ๋ณํํ๋ฉด 15์ธ๋ฐ ์ด๋ $2^{4}-1$๊ณผ ๋์ผํ๋ค. ์ด์ฒ๋ผ n
๋นํธ๋ก ํํํ ์ ์๋ ์ต๋๊ฐ์ ํญ์ $2^{n} -1$ ๊ณต์์ผ๋ก ๊ณ์ฐํ ์ ์๋ค.
์ ํํ ์ฐ์ฐ ๊ฒฐ๊ณผ ์ป๋ ๋ฒ
โถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
- math.js: ์ํ ์ฐ์ฐ๊ณผ ๊ณ ๊ธ ๊ธฐ๋ฅ์ด ํ์ํ ๋ ์ ํฉ / 13.6k star
- decimal.js: ์ ๋ฐํ ์์์ ์ฐ์ฐ์ด ์ค์ํ ๋ ์ ํฉ / 5.8k star
โท Number.toFixed([digits])
๋ฉ์๋ ์ฌ์ฉ — ํตํ(่ดงๅธ) ๋ค๋ฃฐ ๋ ์ ์ฉ
const num = 12345.6789;
num.toFixed(); // '12346' -> ์์์ 0์๋ฆฌ๊น์ง ํ์, ์์์ 1๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ
num.toFixed(1); // '12345.7' -> ์์์ 1์๋ฆฌ๊น์ง ํ์, ์์์ 2๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ
(0.1 + 0.2).toFixed(1); // '0.3' -> ์์์ 1์๋ฆฌ๊น์ง ํ์, ์์์ 2๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ
- ๋์ ๋ฐฉ์: ์ง์ ํ ์์์ ์๋ฆฟ์๋งํผ ํ์ํ๊ณ , ๊ทธ ์๋ฆฟ์๋ฅผ ๋์ด๊ฐ๋ ๋ถ๋ถ์ ๋ฐ์ฌ๋ฆผ
- ํ๋ผ๋ฏธํฐ: ๋ณด์กดํ ์์์ ์๋ฆฟ์ ์ง์ (0~20). ์๋ต ์ 0์ผ๋ก ์ฒ๋ฆฌ
- ์๋ฆฟ์ ๊ณ ์ ๊ธฐ์ค: ์์์
- ๋ฐํ ๊ฐ: ๋ฌธ์์ด
โธ Number.toPrecision([precision])
๋ฉ์๋ ์ฌ์ฉ — ์ซ์ ๊ธธ์ด ์กฐ์ ์ ์ ์ฉ
const num = 12345.6789;
num.toPrecision(); // '12345.6789' -> ํ๋ผ๋ฏธํฐ ์๋ตํด์ toString()์ผ๋ก ์๋
num.toPrecision(1); // '1e+4' -> 1×10โด -> ์ ํจ ์ซ์ 1๊ฐ ํ์, 2๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ
num.toPrecision(6); // '12345.7' -> ์ ํจ ์ซ์ 6๊ฐ ํ์, 7๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ
(0.1 + 0.2).toPrecision(1); // '0.3' -> ์ ํจ ์ซ์ 1๊ฐ ํ์, 2๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ
- ๋์ ๋ฐฉ์: ์ ์ฒด ์ซ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ง์ ํ ๊ธธ์ด(์ ๋ฐ๋) ๋งํผ ํ์ํ๊ณ , ๊ทธ ๋ท์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ
- 10 ์ด์ ์ซ์๋ฅผ ํ ์๋ฆฌ ์ ํจ ์ซ์๋ก ํ๊ธฐํ ๋ ์ง์ ํ๊ธฐ๋ฒ(์: 1e+4)์ ์ฌ์ฉํด ์๋ ์ซ์ ํฌ๊ธฐ ์ ์ง
- โ ๏ธ Leading zeroes๋ฅผ ์ ์ธํ ์ซ์๋ง ์ ํจ ์๋ฆฟ์๋ก ๊ณ ๋ คํ๋ฏ๋ก ์ฃผ์
- ๐ ์๋ฅผ ๋ค์ด 0.0012 ์ซ์์์ ์์ชฝ์ ์๋ 0์ ์ ์ธํ๊ณ 12๋ง ์ ํจํ ์๋ฆฟ์๋ก ์ทจ๊ธ
- ํ๋ผ๋ฏธํฐ: ์ ํจ ์๋ฆฟ์ ์ง์ . ์๋ต ์
toString()
์ผ๋ก ์๋ - ์๋ฆฟ์ ๊ณ ์ ๊ธฐ์ค: ์ ์ฒด ์ซ์
- ๋ฐํ ๊ฐ: ๋ฌธ์์ด
โน ์ค์์ ํ์ํ ๋งํผ ๊ฑฐ๋ญ์ ๊ณฑํ์ฌ ์ ์๋ก ๋ง๋ ํ ์ฐ์ฐ
const factor = 10; // ์ค์ผ์ผ ํฉํฐ
const x = 0.1 * factor; // 1
const y = 0.2 * factor; // 2
const num1 = (x + y) / factor; // 0.3
const num2 = (x * y) / factor ** 2; // 0.02
Number.EPSILON
์๋ฐ์คํฌ๋ฆฝํธ์ Number.EPSILON
์์๋ 1๊ณผ 1๋ณด๋ค ํฐ ์ซ์ ์ฌ์ด์์ ํํํ ์ ์๋ ๊ฐ์ฅ ์์ ์ฐจ์ด๋ฅผ ๋ํ๋ธ๋ค. ์ฆ, ๋ ์ซ์ ์ฌ์ด์ ๊ฐ์ฅ ์์ ์ฐจ์ด๋ฅผ ๋ํ๋ธ๋ค. ์๋ฅผ ๋ค์ด 1 + Number.EPSILON
์ 1๋ณด๋ค ํฐ ๊ฐ์ฅ ์์ ์ซ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
1 + Number.EPSILON // 1.0000000000000002
Number.EPSILON
์์์ ๊ฐ์ ๋๋ต 2.220446049250313e-16 ๊ฐ์ ๊ฐ์ง๋๋ฐ, ์ด๋ 64๋นํธ ๋ถ๋์์์ ์ ๊ฐ์๋ถ์์ ํํํ ์ ์๋ ๊ฐ์ฅ ์์ ๋จ์ $2^{-52}$์ ๋์ผํ๋ค. ๋ค์ ๋งํด ๋ถ๋์์์ ์์ ์ด ๊ฐ๋ณด๋ค ์์ ์๋ ๋ฌด์ํ ์ ์์์ ์๋ฏธํ๋ค.
Number.EPSILON // 2.220446049250313e-16 -> 0.0000000000000002220446049250313
Number.EPSILON
์์๋ ๋ ์ซ์๊ฐ ๊ฐ์์ง ํ์ธํ ๋ ์ ์ฉํ๋ค. ์์์ ์ดํด๋ดค๋ฏ 0.1 + 0.2๋ 0.3์ด ์๋๋ผ ๊ทผ์ฟ๊ฐ์ธ 0.30000000000000004๊ฐ ๋๋ค. ๋ง์ฝ ์ด ๊ทผ์ฟ๊ฐ๊ณผ 0.3์ ์ฐจ์ด๊ฐ Number.EPSILON
๋ณด๋ค ์๋ค๋ฉด ๋ถ๋ ์์์ ์์ ์๋ณํ ์ ์๋ ๊ฐ๋ณด๋ค ๋ ์๊ธฐ ๋๋ฌธ์ ๋์ผํ ์ซ์๋ก ๊ฐ์ฃผํ ์ ์๋ค.
const a = 0.1;
const b = 0.2;
const c = 0.3;
const equal = Math.abs(a + b - c) < Number.EPSILON; // true
// 0.30000000000000004 - 0.3 = 0.00000000000000004
// 0.00000000000000004 < 0.0000000000000002220446049250313
๋ ํผ๋ฐ์ค
- CS50 - ๊ณ ์ ์์์ (fixed point)๊ณผ ๋ถ๋ ์์์ (floating point) | ์๊ฐ๊ณผ ๊ณ ๋ฏผ
- ๋ถ๋ ์์์ ์ ์ดํด (1๋ถ) | Devocean
- Why does 0.1 + 0.2 = 0.30000000000000004? | Julia Evans
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[Algorithm] ์ต์ ํ(Heap)์ผ๋ก ์ฐ์ ์์ ํ ๊ตฌํํ๊ธฐ
[Algorithm] ์ต์ ํ(Heap)์ผ๋ก ์ฐ์ ์์ ํ ๊ตฌํํ๊ธฐ
2024.05.28 -
[Algorithm] ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ — ์ต๋จ ๊ฒฝ๋ก ์ฐพ๊ธฐ
[Algorithm] ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ — ์ต๋จ ๊ฒฝ๋ก ์ฐพ๊ธฐ
2024.05.28 -
[Algorithm] ์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ / ์์ธ์๋ถํด๋ก ์ต์๊ณต๋ฐฐ์ ์ต๋๊ณต์ฝ์ ๊ณ์ฐํ๊ธฐ
[Algorithm] ์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ / ์์ธ์๋ถํด๋ก ์ต์๊ณต๋ฐฐ์ ์ต๋๊ณต์ฝ์ ๊ณ์ฐํ๊ธฐ
2024.05.26 -
[TS] ํ์ ์คํฌ๋ฆฝํธ ๊ตฌ์กฐ์ ํ์ดํ ํ์ฉํ๊ธฐ
[TS] ํ์ ์คํฌ๋ฆฝํธ ๊ตฌ์กฐ์ ํ์ดํ ํ์ฉํ๊ธฐ
2024.05.25