์ ๋ฐ๋ ์์ค ์์ด ์ํ ์์๋ฅผ ์ ์ ํ๊ฒ ์ง์ํ๋ ค๋ฉด printf์ %a ์ถ๋ ฅ์ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์์ด์ผ ํฉ๋๋ค.
(์ฆ, 0x1.ffffffffffffffp+1023_f64 ๊ตฌ๋ฌธ)
๋๋ ์ด ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ๋์๊ณ ์ด๊ฒ์ด ๋ถํํ๊ฒ๋ ๋ฌธ์ #1306์ ๋์ด๋ฆฐ๋ค๋ ๊ฒฐ๋ก ์ ๋ด๋ ธ์ต๋๋ค. ํ์ฌ ๋ ์๋ .
์ดํ์ ๋ชจ๋ ์ํ ๋ฌธ์๋ฅผ ๊ธ์งํฉ๋๋ค. 0x<digits>.
ํจํด์ด ๋ฐ๊ฒฌ๋๋ฉด ์ ํ์ ์ผ๋ก ํ์ฉํ๋๋ก ์ ํํ ์ ์์ง๋ง ๋๋ฌด ์ผ๊ด์ฑ์ด ์์ด ๋ณด์ด๋ฉฐ ๋ถ์ผ์น๋ฅผ ์์ ๋ ค๋ฉด ๋ฌดํํ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ํ์ํ ์ ์์ต๋๋ค.
์ ๋ค์ ์ซ์ ๋๋ 0x ๋๋ 0b๋ฅผ ์๊ตฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ถฉ๋์ ํผํ ์ ์๊ณ (ํฅ๋ฏธ๋กญ๊ฒ๋) ์ํ๋ ๊ฒฝ์ฐ ๊ธฐ์๋ฅผ ๋ฆฌํฐ๋ด ์ค๊ฐ์ผ๋ก ์ ํํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ C99๋ก ์์ฑํ๋ ๊ฒ๋ณด๋ค ์ฝ๊ฐ ๋ชป์๊ฒผ์ ๋ฟ์ ๋๋ค.
@graydon ๋๋ ์ ๋ค์ 0๋ง ์๊ตฌํ ์ ์์ต๋๋ค. (์: 0x1fffffffffffff.0p+972_f64
๋์ 0x1.fffffffffffffp+1023_f64
)
๋๋ ์ด๊ฒ์ด ์ด์ ๋ฒ์ ๊ณผ ํธํ๋์ง ์๋๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
๊ธฐ๋ฅ ์์ฑ ์ด์ ํ์ ๋ํด ์น์ธ๋จ
2013-07-15์ ๋ถ๋ฅ๋ฅผ ์ํด ๋ฐฉ๋ฌธํ์ต๋๋ค. ์ฌ๊ธฐ์์ ๊ตฌ๋ฌธ์ ์ค์ ๋ก ๊ฒฐ์ ํ์ต๋๊น? ์ด๊ฒ์ ์๋ก์ด ๊ธฐ์ฌ์์๊ฒ ์์ฃผ ์ฌ์ด ์์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ค์๊ฒ ๊ตฌ๋ฌธ์ ๋ํ ๋ช ํํ ์ฌ์์ ์ ๋ฌํ ์ ์๋ค๋ฉด _if_; ๊ทธ๋ฌ๋ ๊ตฌ๋ฌธ์ด ์์ง ์ค๊ณ ๋จ๊ณ์ ์๋ค๋ฉด ๊ทธ ์ฃผ์ฅ์ ์ฌ์ค์ด ์๋๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ ๊ตฌ๋ฌธ์ ์์ ํ ์ดํดํ์ง ๋ชปํ๋ค๊ณ ์๊ฐํ์ง๋ง ์ ๋ฏธ์ฌ(์ผ๋ถ๋ 16์ง์ f๋ก ์์)์ ์ถฉ๋ํ๋ ๊ฒ์ ํผํ ํ์๊ฐ ์๋ค๋ ์ ์ ์ง์ ํด์ผ ํฉ๋๋ค. ๊ฐ์๋ฅผ ์ง์ ํ๊ณ ์ ์ฒด ์ง์(์ญ์ง์)์ ๊ฒฐํฉ๋ ๊ฒฝ์ฐ์๋ง.
์ด๊ฒ์ ์์ง ๊ตฌํ๋์ง ์์์ต๋๋ค.
1.0 ์๋
16์ง์ ๋ถ๋ ์์์ ์ C ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ฝค ์ธ๊ธฐ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Rust์์๋ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค.
16์ง๋ฒ float๊ฐ Rust์์ ํ์ฅ์ผ๋ก ๊ตฌํ๋ ๋ค์ ๋ณ๋์ ํฌ๋ ์ดํธ๋ก ์ฎ๊ฒจ์ ธ ์ด์ rust-deprecated
์๊ณ nightly Rust๋ก ์ปดํ์ผํ์ง ๋ชปํ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ๋ฏธ๋๋ ๋ฌด์์ ๋๊น?
๋ํ ์ด๊ฒ์ ๊ด์ฌ์ด ์์ต๋๋ค. ์ปดํจํฐ ๊ฐ์ ์ผ๊ด๋ ๊ฒฐ๊ณผ๊ฐ ํ์ํ ๊ฒ์์ ๋ํด ์ฌ์ ๊ฐ๋ฅํ ๋ฌผ๋ฆฌ ์์คํ ์ ๊ตฌํํ๋ ค๊ณ ํฉ๋๋ค. 16์ง ๋ถ๋ ์์์ ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋ฉด ํ ์คํธ ๋ฐ ์์์์ ์ ํํ ๋นํธ ๋จ์ ๋ถ๋ ์์์ ๊ฐ์ ์์ฑํ ์ ์์ต๋๋ค.
์ต์ํ ์ด ์ค๋ ๋๊ฐ "rust hex float literal"์ ๋ํด ์ป์ ์ฒซ ๋ฒ์งธ ๊ฒฐ๊ณผ์ด๊ธฐ ๋๋ฌธ์ ์ด ๊ธฐ๋ฅ์ด ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ์ด์ ์ ๋ํด ์ค๋ช ํ๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
ํ์ฌ ์ํฉ์ด ์ข ์ด๋ฆฌ๋ฅ์ ํฉ๋๋ค. ์ ์ฐจ์ ๋งคํฌ๋ก๋ ์ง๊ธ ์์ ์ ์งํ ์ค์ด๋ฉฐ(#38356) ์ด๋ฌํ ์ผ์ด ์งํ๋๋ ๋์ hexfloat
๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๋ ๊ฒ์ ์ต์ํ ์๊ฐ ๋ญ๋น์
๋๋ค. ํ์ง๋ง ๊ทธ ์ดํ์ ์ด์ผ๊ธฐ๋ ์ด๋ป๊ฒ ๋ ์ง ๋ชจ๋ฅด๊ฒ ๋ค.
๋ด ์ดํด๊ฐ ๋ง๋ค๋ฉด C/C++์ 16์ง๋ฒ ๋ถ๋ ์์์ ์ 10์ง์ ๋ถ๋ ์์์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ฐ์ฌ๋ฆผ๋๋ ๊ฒ์ด ๋ณด์ฅ๋์ง ์๊ธฐ ๋๋ฌธ์ ์กด์ฌํฉ๋๋ค[1]. ๊ทธ๋ฌ๋ Rust์์๋ #27307---์ด๊ฒ์ด ๋ฐ๋์ ์๋์ ์ธ ๊ฒ์ ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค!--- ๊ฑฐ์ ๋ชจ๋ ์์ ๋ถ๋ ์์์ (#31407์ ์ค์ง์ ์ผ๋ก ๊ด๋ จ์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ์ค๋ช ํฉ๋๋ค)์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ผ๋ก ๋ฐ์ฌ๋ฆผํด์ผ ํ๋ฏ๋ก ๊ทธ๋ฅ Rustc๋ฅผ ์ค ์ ์์ต๋๋ค. ์ ์ ํ ์ซ์(์: 30)์ ์์ ์๋ฆฟ์๋ฅผ ์ ๋ ฅํ๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ๋ฐ์ฌ๋ฆผ๋ ์ซ์๋ฅผ ์ป์ต๋๋ค. ์ด๊ฒ์ ํ์ฌ๋ก์๋ "์ค์ฉ์ ์ธ" ๋๋ต์ด ๋ ๊ฒ์ ๋๋ค.
์ฌ์ ํ 16์ง์ ๋ถ๋ ์์์ ์ด ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํ๋ ํ ๊ฐ์ง๋ C/C++์์ ๋ณํํ๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ 16์ง์ ๋ถ๋ ์์์ ์ 10์ง์๋ก ๋ณํํ๊ณ ์ถ์ง๋ ์์ ๊ฒ์ ๋๋ค :) ์ ๋ ์ต๊ทผ์ ์ ํํ ์ด๊ฒ์ ์ํํ๋ ์คํ์ ์ ์ฐจ ๋งคํฌ๋ก๋ฅผ ์์ฑํ์ฌ 16์ง์ ๋ถ๋ ์์์ ์ 10์ง์ ๋ถ๋ ์์์ ์ผ๋ก ๋ณํ(rusc๊ฐ ์ดํดํ ์ ์์)ํ์ง๋ง ๋ฆด๋ฆฌ์ค๋ฅผ ๊บผ๋ คํ๊ธฐ ๋๋ฌธ์ ํ์ ์ ์ง๋ ์ค์ ๋ก ์ง๊ธ๊น์ง ๋ณด์ฅ๋์ง ์์์ต๋๋ค. ์ ์๊ฐ์๋ ์์ ํ ์ด์ ๋๋ค. constexpr์์๋ง ์ ํํ ๋นํธ ํจํด์ผ๋ก float๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์ ๋ ๊ทธ๊ฒ์ ์ ์ฉํ ๊ฒ์ ๋๋ค.
[1] ์๋ฅผ ๋ค์ด ISO C99๋ ์์์ ์ดํ ์๋ฆฟ์๋ฅผ ยฑ1.5 ulps ๋ด์์ ํํ ๊ฐ๋ฅํ ์ซ์๋ก ๋ณํํด์ผ ํ๋ค๊ณ ์๊ตฌํฉ๋๋ค("๊ฒฐ๊ณผ๋ ๊ฐ์ฅ ๊ฐ๊น์ด ํํ ๊ฐ๋ฅํ ๊ฐ์ด๊ฑฐ๋ ๊ฐ์ฅ ๊ฐ๊น์ด ํํ ๊ฐ๋ฅํ ๊ฐ์ ๋ฐ๋ก ์ธ์ ํ ๋ ํฌ๊ฑฐ๋ ์์ ํํ ๊ฐ๋ฅํ ๊ฐ"). ).
@lifthrasiir , ์กฐ๋ง๊ฐ C hex floats๋ฅผ Rust๋ก ์ฌ๋ฐ๋ฅด๊ฒ ๋ฒ์ญํ์ฌ https://github.com/jameysharp/corrode/issues/73 ์ ์์ ํ๊ณ ์ถ์ผ ๋ฏ๋ก ๊ทํ์ ์๊ฒฌ์ ๋ ์ ์ดํดํ๊ณ ์ถ์ต๋๋ค. ์์ง ์ฌ๊ธฐ์ ๊ด๋ จ๋ ๋ด์ฉ์ ์ดํดํ๊ธฐ ์ํด ๋ถ๋ ์์์ ๋ฌธ์ ์ ๋ํด ์ถฉ๋ถํ ์ฝ์ง ์์์ต๋๋ค.
๋ชจ๋๋ฌ Rust ์ปดํ์ผ๋ฌ ๋ฒ๊ทธ, ๋ชจ๋ 16์ง ๋ถ๋ ์์์ ๋ฆฌํฐ๋ด์ด Rust ์ปดํ์ผ๋ฌ๊ฐ ๋์ผํ ๋นํธ ํจํด์ผ๋ก ๋ณํํ ์ญ์ง ๋ถ๋ ์์์ ๋ฆฌํฐ๋ด๋ก ๋ณํ๋ ์ ์๋ค๋ ๋ง์์ด์ ๊ฐ์? ๊ทธ๋ ๋ค๋ฉด Corrode๊ฐ ๊ทธ ๋ณํ์ ์ํํ๋๋ก ํ๋ฉด ๊ธฐ์ ๊ฒ์ ๋๋ค. ํด๋น ๋ณํ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ํํ๊ธฐ ์ํด ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ฝ์ด์ผ ํ ์ฐธ์กฐ๋ฅผ ์ถ์ฒํ ์ ์์ต๋๊น? (์ ์ฐจ์ ๋งคํฌ๋ก์ ๋ํ ํฌ์ธํฐ๊ฐ ์์ผ๋ฉด ์ข๊ฒ ์ง๋ง ์ด์์ ์ผ๋ก๋ ์ธ์ฉํ ๋ ผ๋ฌธ์ด๋ ์ฑ ๋ ๊ฐ๊ณ ์ถ์ต๋๋ค.)
์ฆ, 16์ง์ ๋ถ๋ ์์์ ์ ์ ํํ ์ญ์ง์ ๋ฒ์ ์ ํจ์ฌ ๋ ๋ง์ ์๋ฆฟ์๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค(๋ง๋์?). ๋ฐ๋ผ์ ์๋ง๋ 16์ง์ ๋ถ๋ ์์์ ๋ฒ์ ์ ์ฌ์ฉํ๊ธฐ์ ์ถฉ๋ถํ ์ซ์ ์ ๋ฐ๋์ ๊ด์ฌ์ด ์๋ ์ฌ๋๋ค์๊ฒ ๋ ์ฝ๊ธฐ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฌ์ธ ๊ฒ์ ๋๋ค. . 16์ง์ ๋ถ๋ ์์์ ์ด ์ด ์ซ์์ ๋ํด ์ธ๊ฐ์ด ์ ํธํ๋ ํ์์ด๋ผ๋ฉด Rust๊ฐ ์ด๋ฅผ ์ง์ํด์ผ ํ๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค. ๋ฐ๋ผ์ IMO, 16์ง์ ์๋ ๋ฅผ ์ฌ์ฉํ ์ฌ๋๋ค์ ๋ ๋ง์ ํผ๋๋ฐฑ์ด ๋์์ด ๋ ๊ฒ์ ๋๋ค.
๋ชจ๋๋ฌ Rust ์ปดํ์ผ๋ฌ ๋ฒ๊ทธ, ๋ชจ๋ 16์ง ๋ถ๋ ์์์ ๋ฆฌํฐ๋ด์ด Rust ์ปดํ์ผ๋ฌ๊ฐ ๋์ผํ ๋นํธ ํจํด์ผ๋ก ๋ณํํ ์ญ์ง ๋ถ๋ ์์์ ๋ฆฌํฐ๋ด๋ก ๋ณํ๋ ์ ์๋ค๋ ๋ง์์ด์ ๊ฐ์?
์ ๋ฏฟ์์ ๊ทธ๋ ์ต๋๋ค.
ํด๋น ๋ณํ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ํํ๊ธฐ ์ํด ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ฝ์ด์ผ ํ ์ฐธ์กฐ๋ฅผ ์ถ์ฒํ ์ ์์ต๋๊น?
ํ์ฌ Rust ์ปดํ์ผ๋ฌ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ์ํ ๋ชจ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ๊ตฌํํ ํ์๊ฐ ์์ต๋๋ค(๋ ์ด๋ ค์ด :-). ์ฐธ์กฐ๊ฐ ์ ๋ง๋ก ํ์ํ ๊ฒฝ์ฐ ๋ค์์ ์ฐธ์กฐํ์ญ์์ค.
๋ฐ์ด๋๋ฆฌ์์ ์ญ์ง์๋ก์ ๋ณํ("flt2dec", #24612)์ [Dragon4]์ [Grisu3]์ ํ์ด๋ธ๋ฆฌ๋์ ๋๋ค.
10์ง์์์ 2์ง์๋ก์ ๋ณํ("dec2flt", #27307)์ [Clinger]๊ฐ ์ค๋ช ํ ๋ช ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. (๋ด๊ฐ ์ง์ ๊ตฌํํ์ง ์์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ค์ ๋ํ ์ง์์ด ์ ํ์ ์ ๋๋ค.)
๊ธฐ๋ก์ ์ํด ๋ด ๊ตฌํ์ lifthrasiir/hexf์ ๋๋ค (์ง๊ธ ๊ฒ์๋จ, ์์ง crates.io์๋ ์์). ๋ถ๋ด์์ด ํฝ์ ํ์ธ์.
์ฆ, 16์ง์ float์ ์ ํํ ์ญ์ง์ ๋ฒ์ ์ ํจ์ฌ ๋ ๋ง์ ์๋ฆฟ์๋ฅผ ์ทจํ ์ ์์ต๋๋ค(๋ง๋์?), [...] 16์ง์ float๊ฐ ์ด ์ซ์์ ๋ํด ์ธ๊ฐ์ด ์ ํธํ๋ ํ์์ด๋ผ๋ฉด Rust๊ฐ ์ด๋ฅผ ์ง์ํด์ผ ํ๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค. . [...]
์ ํํ๋ ์๋๋๋ค(์: 0x1.999999999999bp-4
= 0.10000000000000002
. Rust๊ฐ 16์ง์ ๋ถ๋ ์์์ ์ ์ง์ํด์ผ ํ๋์ง ์ฌ๋ถ์ ๋ํ ์๊ฒฌ์ด ์์ต๋๋ค.
์ด์ ๊ณต์์ ์ผ๋ก hexf๋ฅผ crates.io์ ๊ฒ์ @jameysharp , ์์
์ hexf-parse๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๊น? (๋ฐ์ค์๋ ๊ตฌ๋ฌธ C99 ๊ฑฐ์ ๋์ผํ ๊ฐ์์ผ hexadecimal-floating-constant
๋น ์ข
๋จ ์ฐ์ธ ์ ํ์ floating-suffix
).
ํธ์ง: ์์, ํ ์ผ์ด์ค๋ฅผ ๋์ณค์ต๋๋ค. 0x1p1
๋ ์ ํจํด์ผ ํ์ง๋ง hexf๋ ๊ทธ๊ฒ์ ์ธ์ํ์ง ๋ชปํฉ๋๋ค. ์๋ง๋ ๊ทธ๊ฒ์ ์ฝ๊ฒ ์ค๋ช
ํ ์ ์์ต๋๋ค.
์ ์๊ฒ๋ ๋น์ทํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๋ค. float ๋ฆฌํฐ๋ด์ ์ ๋ฐ๋ ์์ค ์์ด ์ปดํ์ผ๋ฌ์์ ๋ น ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
16์ง์ ๋ถ๋ ์์์ ์ C ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ฝค ์ธ๊ธฐ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Rust์์๋ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค.
16์ง๋ฒ float๊ฐ Rust์์ ํ์ฅ์ผ๋ก ๊ตฌํ๋ ๋ค์ ๋ณ๋์ ํฌ๋ ์ดํธ๋ก ์ฎ๊ฒจ์ ธ ์ด์
rust-deprecated
์๊ณ nightly Rust๋ก ์ปดํ์ผํ์ง ๋ชปํ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.์ด ๊ธฐ๋ฅ์ ๋ฏธ๋๋ ๋ฌด์์ ๋๊น?