Rust: 16์ง„์ˆ˜ ๋ถ€๋™ ๋ฆฌํ„ฐ๋Ÿด ์ง€์› ์ถ”๊ฐ€

์— ๋งŒ๋“  2012๋…„ 01์›” 05์ผ  ยท  17์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: rust-lang/rust

์ •๋ฐ€๋„ ์†์‹ค ์—†์ด ์ˆ˜ํ•™ ์ƒ์ˆ˜๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ง€์›ํ•˜๋ ค๋ฉด printf์˜ %a ์ถœ๋ ฅ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
(์ฆ‰, 0x1.ffffffffffffffp+1023_f64 ๊ตฌ๋ฌธ)

A-frontend E-easy

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

16์ง„์ˆ˜ ๋ถ€๋™ ์†Œ์ˆ˜์ ์€ C ์ˆ˜ํ•™ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๊ฝค ์ธ๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Rust์—์„œ๋„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

16์ง„๋ฒ• float๊ฐ€ Rust์—์„œ ํ™•์žฅ์œผ๋กœ ๊ตฌํ˜„๋œ ๋‹ค์Œ ๋ณ„๋„์˜ ํฌ๋ ˆ์ดํŠธ๋กœ ์˜ฎ๊ฒจ์ ธ ์ด์ œ rust-deprecated ์žˆ๊ณ  nightly Rust๋กœ ์ปดํŒŒ์ผํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์˜ ๋ฏธ๋ž˜๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋ชจ๋“  17 ๋Œ“๊ธ€

๋‚˜๋Š” ์ด ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ๋†€์•˜๊ณ  ์ด๊ฒƒ์ด ๋ถˆํ–‰ํ•˜๊ฒŒ๋„ ๋ฌธ์ œ #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]์˜ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ์ž…๋‹ˆ๋‹ค.

    • [Dragon4]: Burger, RG ๋ฐ Dybvig, RK 1996. ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๋ฅผ ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ทธํ”Œ๋žœ ์•„๋‹™๋‹ˆ๋‹ค. 31, 5(1996๋…„ 5์›”), 108-116.
    • [Grisu3]: ํ”Œ๋กœ๋ฆฌ์•ˆ ๋กœ์ด์น˜. 2010. ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๋ฅผ ์ •์ˆ˜๋กœ ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ทธํ”Œ๋žœ ์•„๋‹™๋‹ˆ๋‹ค. 45, 6(2010๋…„ 6์›”), 233-243.
  • 10์ง„์ˆ˜์—์„œ 2์ง„์ˆ˜๋กœ์˜ ๋ณ€ํ™˜("dec2flt", #27307)์€ [Clinger]๊ฐ€ ์„ค๋ช…ํ•œ ๋ช‡ ๊ฐ€์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. (๋‚ด๊ฐ€ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋“ค์— ๋Œ€ํ•œ ์ง€์‹์ด ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.)

    • [ํด๋ง๊ฑฐ]: ์œŒ๋ฆฌ์—„ D. ํด๋ง๊ฑฐ. 1990. ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ฝ๋Š” ๋ฐฉ๋ฒ•. ์‹œ๊ทธํ”Œ๋žœ ์•„๋‹™๋‹ˆ๋‹ค. 25, 6(1990๋…„ 6์›”), 92-101.

๊ธฐ๋ก์„ ์œ„ํ•ด ๋‚ด ๊ตฌํ˜„์€ 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 ๋ฆฌํ„ฐ๋Ÿด์˜ ์ •๋ฐ€๋„ ์†์‹ค ์—†์ด ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ๋…น ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰