๋ฐ˜์‘ํ˜•

์‹ค์ˆ˜๋ฅผ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ


2์ง„์ˆ˜๋Š” 0๊ณผ 1, ๋‘ ๊ฐœ์˜ ์ˆซ์ž๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ณด๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ปดํ“จํ„ฐ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ 2์ง„์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋น„ํŠธ(bit)๋Š” binary digit์˜ ์ค„์ž„๋ง๋กœ ์ด์ง„ ์ˆซ์ž ์ฒด๊ณ„์˜ ๊ธฐ๋ณธ ๋‹จ์œ„์ด๋‹ค. ๊ฐ ๋น„ํŠธ๋Š” 0 ๋˜๋Š” 1์˜ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

์ •์ˆ˜

์ผ์ƒ์ƒํ™œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” 10์ง„์ˆ˜ ์ˆซ์ž 100์„ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด, ๋ชซ์ด 0์ด ๋  ๋•Œ๊นŒ์ง€ 2๋กœ ๋‚˜๋ˆ„๊ณ , ๋งˆ์ง€๋ง‰์— ๋‚˜์˜จ ๋‚˜๋จธ์ง€๋ถ€ํ„ฐ(์—ญ์ˆœ์œผ๋กœ) ๋‚˜์—ดํ•˜๋ฉด ๋œ๋‹ค.

 

 

์œ ํ•œ ์†Œ์ˆ˜

์ •์ˆ˜๋Š” ์œ„์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, 0.5, 0.33 ๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด ๋” ๋ณต์žกํ•œ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

์‹ค์ˆ˜(Real Number) ์ฒด๊ณ„

์˜ˆ๋ฅผ ๋“ค์–ด 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*}$$

 

์ด์ง„์ˆ˜ 1000100.101์„ ์‹ญ์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์˜ˆ์‹œ

 

์ปดํ“จํ„ฐ์—์„œ ์‹ค์ˆ˜ ํ‘œํ˜„


์ปดํ“จํ„ฐ๊ฐ€ ์‹ค์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์€ ๋Œ€ํ‘œ์ ์œผ๋กœ โถ๊ณ ์ • ์†Œ์ˆ˜์ (Fixed-Point Number Representation) ๋ฐฉ์‹๊ณผ โท๋ถ€๋™ ์†Œ์ˆ˜์ (Floating-Point Number Representation) ๋ฐฉ์‹์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

 

๊ณ ์ • ์†Œ์ˆ˜์  ๋ฐฉ์‹ Fixed-Point

๊ณ ์ • ์†Œ์ˆ˜์  ๋ฐฉ์‹์€ ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ ์†Œ์ˆ˜์ ์˜ ์œ„์น˜๋ฅผ ๊ณ ์ •์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ์ •์ˆ˜๋ถ€์™€ ์†Œ์ˆ˜๋ถ€์— ํ• ๋‹น๋˜๋Š” ๋น„ํŠธ์˜ ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋‹ค. ์ด๋Š” ์ •์ˆ˜์™€ ์†Œ์ˆ˜์˜ ํ‘œํ˜„ ๋ฒ”์œ„๊ฐ€ ๋ฏธ๋ฆฌ ์ง€์ •๋˜์–ด ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ์•„์ฃผ ์ž‘๊ฑฐ๋‚˜ ํฐ ์ˆ˜์˜ ํ‘œํ˜„์—๋Š” ์ œ์•ฝ์ด ๋”ฐ๋ฅด๋ฉฐ, ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ณต๊ฐ„๊นŒ์ง€ ๋น„ํŠธ ํ• ๋‹น์ด ์ด๋ฃจ์–ด์ ธ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ณ ์ • ์†Œ์ˆ˜์  ๋ฐฉ์‹์—์„œ ์ •์ˆ˜์™€ ์†Œ์ˆ˜์˜ ๋น„ํŠธ ์ˆ˜๋Š” ์‹œ์Šคํ…œ์ด๋‚˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 32๋น„ํŠธ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ฒ˜์Œ 1๋น„ํŠธ๋ฅผ ๋ถ€ํ˜ธ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ๋‚˜๋จธ์ง€ 31๋น„ํŠธ๋ฅผ ์ •์ˆ˜๋ถ€์™€ ์†Œ์ˆ˜๋ถ€๋กœ ๋‚˜๋ˆ ์„œ ์‚ฌ์šฉํ•œ๋‹ค.

 

๐Ÿ’ก 32๋น„ํŠธ ์‹œ์Šคํ…œ์€ CPU๊ฐ€ 32๋น„ํŠธ ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค. ์ฐธ๊ณ ๋กœ 32๋น„ํŠธ ์‹œ์Šคํ…œ์€ 2^32๊ฐœ์˜ ์œ ์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์ตœ๋Œ€ 4GB์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ์˜๋ฏธํ•œ๋‹ค.

 

32๋น„ํŠธ ๊ณ ์ • ์†Œ์ˆ˜์  ๋ฐฉ์‹

  • ์ฒ˜์Œ 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 ํ‘œ์ค€์—์„  ์•„๋ž˜ ๋„ค ๊ฐ€์ง€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์‹ค์ˆ˜๋ฅผ ๋ถ€๋™ ์†Œ์ˆ˜์  ๋ฐฉ์‹์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

 

  1. 2์ง„์ˆ˜ ์ •๊ทœํ™”(normalize)
    ์†Œ์ˆ˜์ ์„ ์™ผ์ชฝ์œผ๋กœ ์ด๋™์‹œ์ผœ ๊ฐ€์ˆ˜๋ถ€๊ฐ€ 1๋กœ ์‹œ์ž‘ํ•˜๋„๋ก ๋งŒ๋“ ๋‹ค
  2. ๋ถ€ํ˜ธ(sign) ํ‘œ๊ธฐ
    ์ฒซ ๋ฒˆ์งธ ๋น„ํŠธ์— ๋ถ€ํ˜ธ๋ฅผ ํ‘œ๊ธฐํ•œ๋‹ค. ์–‘์ˆ˜๋Š” 0, ์Œ์ˆ˜๋Š” 1๋กœ ํ‘œ๊ธฐํ•œ๋‹ค
  3. ์ง€์ˆ˜๋ถ€(exponent) ํ‘œ๊ธฐ
    ๋‹ค์Œ 8๋น„ํŠธ์— ์ •๊ทœํ™” ๊ณผ์ •์—์„œ ์–ป์€ ์ง€์ˆ˜์— bias๋ฅผ ๋”ํ•œ ๊ฐ’์„ ํ‘œ๊ธฐํ•œ๋‹ค
  4. ๊ฐ€์ˆ˜๋ถ€(mantissa) ํ‘œ๊ธฐ
    ๋‹ค์Œ 23๋น„ํŠธ์— ์†Œ์ˆ˜๋ถ€๋ฅผ ๊ฐ’์œผ๋กœ ํ‘œ๊ธฐํ•œ๋‹ค

 

IEEE 754 ๋ถ€๋™ ์†Œ์ˆ˜์  ํ‘œ์ค€์€ 32๋น„ํŠธ ๋‹จ์ •๋„(๊ธฐ๋ณธ ์ •๋ฐ€๋„, Single-Precision)์™€ 64๋น„ํŠธ ๋ฐฐ์ •๋„(2๋ฐฐ ์ •๋ฐ€๋„, Double-Precision) ์ด ๋‘ ๊ฐ€์ง€๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

 

IEEE 754 ๋ถ€๋™ ์†Œ์ˆ˜์  ๊ธฐ๋ณธ ์ •๋ฐ€๋„(32๋น„ํŠธ)
IEEE 754 ๋ถ€๋™ ์†Œ์ˆ˜์  2๋ฐฐ ์ •๋ฐ€๋„(64๋น„ํŠธ) — ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค

๊ณ ์ • ์†Œ์ˆ˜์  ๋ฐฉ์‹์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ •์ˆ˜๋ถ€ 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๋ฅผ ์ •๊ทœํ™”ํ•ด ๋ณด๋ฉด…

  1. 2์ง„์ˆ˜ ๋ณ€ํ™˜ : $1000100.101$
  2. ์†Œ์ˆ˜์  ์ด๋™ : ์•ž์ž๋ฆฌ๊ฐ€ 1์ด ๋˜๋„๋ก ์†Œ์ˆ˜์ ์„ ์˜ฎ๊ฒจ์ค€๋‹ค → $1.000100101$
  3. ์ง€์ˆ˜๋ถ€ ๊ตฌ์„ฑ : ์†Œ์ˆ˜์  ์ด๋™ ํšŸ์ˆ˜(6)๋ฅผ ์ง€์ˆ˜๋กœ ์‚ฌ์šฉํ•œ๋‹ค → $2^6$
  4. ์ •๊ทœํ™” ์™„์„ฑ : $1.000100101\times2^6$

 

์ง€์ˆ˜๋ถ€ Exponent

๐Ÿ’ก ์ˆซ์ž์˜ ์ง„์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์•„๋ž˜ ์ฒจ์ž(subscript)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 127์ด๋ผ๋Š” ์ˆซ์ž๊ฐ€ ์‹ญ์ง„์ˆ˜์ž„์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ 127 ์šฐ์ธก์— โ‚โ‚€ ์•„๋ž˜์ฒจ์ž๋ฅผ ๋ถ™์—ฌ์„œ 127โ‚โ‚€ ํ‘œ๊ธฐํ•œ๋‹ค(127โ‚โ‚โ‚€โ‚Ž ์†Œ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ์„œ ํ‘œ๊ธฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค).

 

32๋น„ํŠธ IEEE 754 ํ‘œ์ค€์—์„œ ์‹ค์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ๋• ์ง€์ˆ˜๋ถ€์— $127_{10}$ ์ˆซ์ž๋ฅผ ๋”ํ•œ ๊ฐ’์œผ๋กœ ์ฑ„์›Œ์•ผ ํ•œ๋‹ค. ์ด 127 ์ˆซ์ž๋Š” bias๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด $68.625_{10}$์˜ ์ด์ง„๋ฒ• ํ‘œํ˜„์—์„œ ์ง€์ˆ˜ ๊ฐ’์ด 6์ด๋ผ๋ฉด ์ด ๊ฐ’์— 127์„ ๋”ํ•œ ํ›„ ๋‹ค์‹œ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์ง€์ˆ˜๋ถ€๋ฅผ ์ฑ„์›Œ์•ผ ํ•œ๋‹ค.

 

  1. 68.625๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ : $1000100.101$
  2. ์†Œ์ˆ˜์  ์•ž์ž๋ฆฌ๊ฐ€ 1์ด ๋˜๋„๋ก ์†Œ์ˆ˜์  ์ด๋™ : $1.000100101$
  3. ์†Œ์ˆ˜์ ์„ ์ด๋™ํ•œ ํšŸ์ˆ˜๋งŒํผ ์ง€์ˆ˜๋กœ ์‚ฌ์šฉ : $6$
  4. ํš๋“ํ•œ ์ง€์ˆ˜์— bias(127) ๋”ํ•˜๊ธฐ : $127+6=133$
  5. ๋”ํ•œ ๊ฐ’ 133์„ ๋‹ค์‹œ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ : $10000101$

 

bias ๊ฐ’์„ ๋”ํ•˜๋Š” ์ด์œ ๋Š” ์ง€์ˆ˜๊ฐ€ ์Œ์ˆ˜์ผ ๋•Œ๋ฅผ ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. $0.078125_{10}$๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด๋ณด์ž. $0.078125_{10}$์˜ ์ด์ง„์ˆ˜๋Š” $0.000101$ ์ด๊ณ  ์ด๋ฅผ ์ •๊ทœํ™”ํ•˜๋ฉด $1.01\times2^{-4}$๊ฐ€ ๋œ๋‹ค. ์ง€์ˆ˜๋Š” $-4$๋กœ ์Œ์ˆ˜๊ฐ€ ๋‚˜์™”๋‹ค.

 

0.078125 ์ด์ง„์ˆ˜ ๋ณ€ํ™˜
0.000101 ์ •๊ทœํ™”

์ง€์ˆ˜๋ถ€์˜ ์Œ์ˆ˜์™€ ์–‘์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด 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์„ ์ž…๋ ฅํ•œ๋‹ค.

 

 

  1. 2์ง„์ˆ˜ ๋ณ€ํ™˜ : $1000100.101_{2}$
  2. ์ •๊ทœํ™” : $1.000100101_{2}\times2^6$
  3. ์ง€์ˆ˜๋ถ€ : $6_{10}+127_{10}(bias)=133_{10}=10000101_{2}$
  4. ๊ฐ€์ˆ˜๋ถ€ : $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์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋Š” ์ˆซ์ž๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌดํ•œ ์†Œ์ˆ˜๋“ค์€ ๋น„ํŠธ์˜ ์ œํ•œ์œผ๋กœ ์ธํ•ด ๊ทผ์‚ฟ๊ฐ’์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค์ฐจ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

  1. 0.1๊ณผ 0.2๋ฅผ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค
  2. ๋‘ ์ˆ˜๋ฅผ ๋ถ€๋™ ์†Œ์ˆ˜์ ์œผ๋กœ ํ‘œ๊ธฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜์˜ฌ๋ฆผ ํ›„ ๊ทผ์‚ฟ๊ฐ’์œผ๋กœ ์ €์žฅํ•œ๋‹ค
  3. ๋‘ ์ˆ˜์˜ ๊ทผ์‚ฟ๊ฐ’์„ ํ•ฉ์‚ฐํ•œ๋‹ค
  4. ํ•ฉ์‚ฐํ•œ ๊ทผ์‚ฟ๊ฐ’์„ ๋‹ค์‹œ 10์ง„ ์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค

 

โš ๏ธ ๋ฐ˜์˜ฌ๋ฆผ์€ IEEE 754 ํ‘œ์ค€์˜ Round to Nearest, Ties to Even ๋ฐฉ์‹์„ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค

 

0.1์˜ ๊ทผ์‚ฌ๊ฐ’
0.2์˜ ๊ทผ์‚ฌ๊ฐ’
0.1 + 0.2์˜ ์ด์ง„ ๊ทผ์‚ฌ๊ฐ’

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

 

 

๋ ˆํผ๋Ÿฐ์Šค


 


๊ธ€ ์ˆ˜์ •์‚ฌํ•ญ์€ ๋…ธ์…˜ ํŽ˜์ด์ง€์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”
๋ฐ˜์‘ํ˜•