written by yechoi

(๋ฒˆ์—ญ) ๋ถ€๋™์†Œ์ˆ˜์ ์„ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ๋ณธ๋ฌธ

Born 2 Code/C, C++

(๋ฒˆ์—ญ) ๋ถ€๋™์†Œ์ˆ˜์ ์„ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ

yechoi 2020. 11. 1. 15:21
๋ฐ˜์‘ํ˜•

๐Ÿ‘‰์ด ๊ธ€์€ Jeff Bezanson์˜ Understanding and Using Floating Point Numbers๋ฅผ ๋ฒˆ์—ญํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์†Œ ์˜์—ญํ•œ ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉฐ, ์˜ค์—ญํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€์„ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.  

 

C++ Article - Understanding Floating Point Numbers - Cprogramming.com

Understanding and Using Floating Point Numbers by Jeff Bezanson Numbers are surely the most prevalent kind of data in computer programs. They are so fundamental that people don't spend much time talking about themโ€”surely everybody knows how to use number

www.cprogramming.com

 

์ˆซ์ž๊ฐ€ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๊ฐ€์žฅ ํ”ํ•œ ๋ฐ์ดํ„ฐ๋ผ๋Š” ๊ฒƒ์€ ํ™•์‹คํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด๋‚˜๋„ ๊ธฐ์ดˆ์ ์ธ ๋‚˜๋จธ์ง€ ์‚ฌ๋žŒ๋“ค์€ ์ˆซ์ž์— ๋Œ€ํ•ด ๋งŽ์ด ๋…ผ์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”. ๊ทธ๋ ‡์ง€๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์„ธ๊ณ„์—์„œ ๊ฐ€์žฅ ํ™˜์ƒ์ ์ธ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š” ๋‹น์‹ ์ด ๋งˆ์ฃผํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์ƒ์ƒ์ด์ƒ์ด๋ผ๋Š” ๊ฒƒ์ด์ฃ .

 

๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ๋ถ€๋™์†Œ์ˆ˜์  ์‹ค์ˆ˜์— ๋Œ€ํ•ด ์ด์ƒํ•œ ์ ์„ ๋“ฃ๊ฑฐ๋‚˜ ๋ดค์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์šฐ๋ฆฌ๋Š” ์ข…์ข… ๊ฐ™์•„ ๋ณด์ด๋Š” ๋ถ€๋™์†Œ์ˆ˜์  ์‹ค์ˆ˜๊ฐ€ C์˜ '==' ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ์ดˆ๋ณด ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ๋ถ€๋™์†Œ์ˆ˜์  ์‹ค์ˆ˜์—๋Š” ==๋ฅผ ์ ˆ๋Œ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ๋ฐฐ์šฐ๊ธฐ๋„ ํ•˜์ฃ . ๋•Œ๋•Œ๋กœ ์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ ์˜ˆ์™ธ์ ์ธ ๊ฒฝ์šฐ์— ๋ถ€๋”ชํžˆ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ˆ˜ํ•™์ ์œผ๋กœ ๋ง์ด ๋˜๋Š” ์ˆ˜์‹์ด, ๋ถ€๋™์†Œ์ˆ˜์ ์„ ์“ฐ๊ธฐ๋งŒ ํ•˜๋ฉด ์‹ค๋ง์Šค๋Ÿฌ์šธ ์ •๋„๋กœ ์ •ํ™•ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ฌด์ž‘์œ„์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋ฑ‰๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š” ๊ฑธ๊นŒ์š”? ๋ถ€๋™์†Œ์ˆ˜์  ์‹ค์ˆ˜์— ๊ด€ํ•ด์„  ์ง๊ด€์— ์–ด๊ธ‹๋‚˜๋Š” ๊ฒƒ๋“ค์ด ๋งŽ๊ณ , ์ด๋Ÿฌํ•œ ํŠน์„ฑ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ๋ถ€๋™์†Œ์ˆ˜์  ์‹ค์ˆ˜๋ฅผ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ๋ฐฐ์šฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋ถ€๋™์†Œ์ˆ˜์  ์‹ค์ˆ˜๋Š” ์ฐฉ์‹œ ํšจ๊ณผ๋ฅผ ์ผ์œผํ‚ต๋‹ˆ๋‹ค. 10์ง„๋ฒ•์ด๋‚˜ ์•„์ฃผ ์ž‘๊ฑฐ๋‚˜ ํฐ ์ˆ˜๋กœ๋„ ํ‘œํ˜„๋˜๋ฉด์„œ โ€™์‹ค์ œโ€™ ์ˆซ์ž์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฑฐ์ฃ . ํ˜„์‹ค์—์„œ ๊ฐ™์€ 4๋ฐ”์ดํŠธ๋กœ ํ‘œํ˜„ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ์‹ค์ˆ˜๋ณด๋‹จ ์ •์ˆ˜๋ฅผ ์ œ๋Œ€๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด์œ ๋Š” ๋‹น์—ฐํ•˜๊ฒŒ๋„ ๋ถ€๋™ ์†Œ์ˆ˜์  ์‹ค์ˆ˜์— ๋Œ€ํ•œ ๋‚ด๋ถ€์ ์ธ ํ‘œํ˜„์ด ๊ฐ„๋‹จํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ •์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋น„ํŠธ๋Š” ๊ทธ ์ž์ฒด๋กœ ์ด์ง„๋ฒ•์˜ ์ˆ˜์ด์ง€๋งŒ, ๋ถ€๋™์†Œ์ˆ˜์  ์‹ค์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋น„ํŠธ๋Š” ์ข€๋” ๋ณต์žกํ•˜๊ฒŒ ํ•ด์„๋ฉ๋‹ˆ๋‹ค. ์ด ํ‘œํ˜„๋ฒ•์— ๋Œ€ํ•ด์„  ๋‚˜์ค‘์— ๊ธธ๊ฒŒ ์„ค๋ช…ํ•˜๋„๋ก ํ•˜๊ณ , ๋จผ์ € ์ •์ˆ˜์™€ ์‹ค์ˆ˜์˜ ๊ฐœ๋…์ ์ธ ์ฐจ์ด๋ฅผ ์•Œ์•„๋ณด๋„๋ก ํ• ๊ฒŒ์š”.

 

 

1. Accuracy vs. Precision

 

์ธก์ • ๊ฐœ๋… ์ค‘์—์„œ Accuracy์™€ Precision์€ ์ •์ˆ˜์™€ ์‹ค์ˆ˜์˜ ๋‹ค๋ฅธ ํŠน์„ฑ์„ ์ž˜ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค(์–ด๋–ค ์‹œ์Šคํ…œ์—์„œ๋„, ์–ด๋–ค ์†Œ์ˆ˜ ํ‘œํ˜„๋ฒ•์ด ์‚ฌ์šฉ๋˜๋”๋ผ๋„ ์ด๋Š” ๋งˆ์ฐฌ๊ฐ€์ง€์˜ˆ์š”.). "accuracy"๋Š” ์ธก์ •์น˜๊ฐ€ ์‹ค์ œ ๊ฐ’์— ์–ผ๋งˆ๋‚˜ ๋น„์Šทํ•œ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด "precision"์€ ์–‘์— ๊ด€ํ•ด ์–ผ๋งˆ ๋งŒํผ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€, ์ด๋ฅผ ๋‹น์‹ ์ด ์–ผ๋งˆ๋‚˜ ๋…์ฐฝ์ ์œผ๋กœ ํ‘œํ˜„ํ•ด๋ƒˆ๋Š”์ง€์— ๊ด€๋ จ๋ผ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ •์ˆ˜ ๊ณ„์‚ฐ์€ ์™„๋ฒฝํžˆ ์ •ํ™•ํ•ด์š”. (์ •์ˆ˜ "2"๊ฐ€ ์žˆ๋‹ค๋ฉด, ๊ทธ๊ฑด ์ •ํ™•ํžˆ 2์ธ๊ฑฐ์ฃ . ๋ˆ„๊ตฌ๋„ ์ด ์‚ฌ์‹ค์— ์ด์˜ ์ œ๊ธฐํ•  ์ˆœ ์—†์–ด์š”.) ๋”์šฑ์ด ์—ฌ๊ธฐ์— 1์„ ๋”ํ•˜๋ฉด, ์ •ํ™•ํžˆ 3์„ ์–ป์„ ๊ฒƒ์ด๋ž€ ๊ฑธ ์•Œ์ฃ . ์ •์ˆ˜๋กœ ์–ด๋–ค ๊ณ„์‚ฐ์— ํ•˜๋“  ๊ฐ„์—, ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋งŒ ์—†๋‹ค๋ฉด์•ผ ๋น„ํŠธ ๋‹จ์œ„๋กœ ์ •ํ™•ํ•œ ์ˆ˜๋ฅผ ์–ป๊ฒŒ ๋  ๊ฒ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ •์ˆ˜์—” precision์ด ๋ถ€์กฑํ•ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด 5์™€ 4๋ฅผ ๊ฐ๊ฐ 2๋กœ ๋‚˜๋ˆ„๋ฉด, ๋‘˜๋‹ค 2๋ผ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋‚ด์š”. ์ •์ˆ˜๋Š” ์กฐ๊ฐ๋‚œ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„  ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์•„์š”. 4๋ณด๋‹ค ์•ฝ๊ฐ„ ํฌ๊ณ  5๋ณด๋‹ค๋Š” ์ž‘์€ ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด, 4๋ณด๋‹ค ํฐ ๋ถ€๋ถ„์˜ ์ •๋ณด๋Š” ์žƒ์–ด๋ฒ„๋ฆฌ์ฃ . ์ •์ˆ˜๋Š” ๋ฏธ์„ธํ•œ ๋ณ€ํ™”๋ฅผ ๋Œ€ํ‘œํ•˜๊ธฐ์—” ๋„ˆ๋ฌด ํˆฌ๋ฐ•ํ•ด์š”. ์ •์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑด ๋ฒฝ๋Œ์„ ์Œ“๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ฃ . ์ •์œก๋ฉด์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด ๋ฒฝ๋Œ์ด ์•„์ฃผ ๋”ฑ์ด๊ฒ ์ง€๋งŒ, ๊ตฌ๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฒฝ๋Œ์€ ๊ทธ๋‹ฅ ์ข‹์€ ์„ ํƒ์€ ์•„๋‹ˆ์ฃ . (๊ตฌ๊ฐ€ ๋ฒฝ๋Œ๋ณด๋‹ค ์•„์ฃผ ํฌ๋‹ค๋ฉด, ๋น„์Šทํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋ณผ ์ˆ˜๋Š” ์žˆ๊ฒ ๋„ค์š”.)

 

ํผํ‹ฐ๋กœ ๋ฒฝ๋Œ์„ ์Œ“์•„ ์˜ฌ๋ฆฌ๋Š” ๋ชจ์Šต

 

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

 

๋ชจ๋“  ๋ฉด์ด ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ ์ •ํ™•ํžˆ ํ‘œํ˜„๋  ์ˆ˜๋Š” ์—†๋‹ค๋Š” ์ ์—์„œ ์‹ค์ˆ˜๋Š” ํƒœ์ƒ์ ์œผ๋กœ ์ •์ˆ˜์™€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ณ„์‚ฐ์„ ํƒ“ํ•˜๋Š” ๊ฑด ์•„๋‹™๋‹ˆ๋‹ค. ์–ด๋–ค ์ง„๋ฒ• ์‹œ์Šคํ…œ์—์„œ๋„ ์ด๋Ÿฌํ•œ ์ œ์•ฝ์€ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. 1/3์„ ์ƒ๊ฐํ•ด๋ณด์„ธ์š”. ๋๋‚˜์ง€ ์•Š๋Š” 10์ง„๋ฒ• ํ‘œํ˜„(e.g 0.333333)๋„ 1/3๊ณผ ๊ฐ™๋‹ค๊ณ  ํ•  ์ˆ˜ ์—†์ฃ . 3์„ ๋๋„ ์—†์ด ๊ฐ€์ ธ๋‹ค ์“ด๋‹คํ•ด๋„ ์ •ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†์„ ๊ฒ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•œ์ •๋œ ์†Œ์ˆ˜์  ์ž๋ฆฌ์ˆ˜๋ก  ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ •ํ™•ํžˆ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ๋ณด๋Š” ๊ฒŒ ๋‚ซ๊ฒ ๋„ค์š”. ๋‹น์‹ ์ด ๋ฌด์–ผํ•˜๋“  ๊ฒฐ๊ณผ๋Š” ์‹ค์ œ์™€ ์กฐ๊ธˆ์€ ํ‹€๋ฆด ์ˆ˜ ๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ์šฐ๋ฆฌ๋Š” ์‹ค์ˆ˜๊ฐ€ ์—ฌ์ „ํžˆ ์œ ์šฉํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ˜์˜ฌ๋ฆผ ์—๋Ÿฌ ์ƒํ™ฉ์„ ํŒŒ์•…ํ•ด ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ํŽธ์ด ๋‚ซ์ฃ . ์ด๋ฅผ ์œ„ํ•ด์„œ๋‚˜ ์•„๋‹ˆ๋ฉด ๊ต์–‘์„ ์œ„ํ•ด์„œ๋ผ๋„, ์†Œ์ˆ˜๊ฐ€ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•„๋Š” ๊ฑด ์ข‹์€ ์ผ์ž…๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•