์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- ๋๋ฃํ์ต
- ์ด๋ ธ๋ฒ ์ด์ ์์นด๋ฐ๋ฏธ
- ์ ๋ ฌ
- ์ฃ์ง์ปดํจํ
- 42์์ธ
- ์ด์ ๋ธ๋ฆฌ์ด
- mistelํค๋ณด๋
- 42seoul
- SFINAE
- ์ฟ ๋ฒ๋คํฐ์ค
- schema first
- ๋์ปค
- GraphQL
- ์คํํธ์
- ์๋ฃ๊ตฌ์กฐ
- ์ฐฝ์
- raycasting
- c++
- Cloud Spanner
- ํ ์คํธ๋ถ
- ๋ถ๋์์์
- psql extension
- ํ์ด์ฌ
- uuid-ossp
- adminbro
- ๋ ์ด์บ์คํ
- enable_if
- ์คํ๋ฆฟํค๋ณด๋
- ํ๋ผ์ด๋นํด๋ผ์ฐ๋
- ์ด์ ๋ธ๋ฆฌ
- Today
- Total
written by yechoi
(๋ฒ์ญ) ๋ถ๋์์์ ์ ์ดํดํ๊ณ ์ฌ์ฉํ๊ธฐ ๋ณธ๋ฌธ
๐์ด ๊ธ์ 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์ ๋๋ ์์ด ๊ฐ์ ธ๋ค ์ด๋คํด๋ ์ ํํ๊ฒ ํํํ ์ ์์ ๊ฒ๋๋ค. ๋ฐ๋ผ์ ํ์ ๋ ์์์ ์๋ฆฌ์๋ก ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ ์ ํํ ํํํ ์ ์๋ค๊ณ ๋ณด๋ ๊ฒ ๋ซ๊ฒ ๋ค์. ๋น์ ์ด ๋ฌด์ผํ๋ ๊ฒฐ๊ณผ๋ ์ค์ ์ ์กฐ๊ธ์ ํ๋ฆด ์ ๋ฐ์ ์์ต๋๋ค. ๊ทธ๋ผ์๋ ์ฐ๋ฆฌ๋ ์ค์๊ฐ ์ฌ์ ํ ์ ์ฉํ๋ค๋ ๊ฒ์ ์๊ธฐ ๋๋ฌธ์, ๋ฐ์ฌ๋ฆผ ์๋ฌ ์ํฉ์ ํ์ ํด ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ ํธ์ด ๋ซ์ฃ . ์ด๋ฅผ ์ํด์๋ ์๋๋ฉด ๊ต์์ ์ํด์๋ผ๋, ์์๊ฐ ์ค์ ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์๋ ๊ฑด ์ข์ ์ผ์ ๋๋ค.