พื้นหลัง
IEEE 754 รูปแบบจุดลอยตัวความแม่นยำสองเท่าเป็นวิธีการแสดงตัวเลขจริงด้วย 64 บิต ดูเหมือนว่าต่อไปนี้:
![]()
จำนวนจริงnจะถูกแปลงเป็น a doubleในลักษณะดังต่อไปนี้:
- เครื่องหมายบิต
sคือ 0 ถ้าตัวเลขเป็นบวกหรือ 1 มิฉะนั้น - ค่าสัมบูรณ์ของ
nมีตัวแทนอยู่ในรูปแบบ2**y * 1.xxxกล่าวคืออำนาจของ 2ครั้งฐาน - เลขชี้กำลัง
eคือy(กำลัง 2) ลบ 1023 - เศษส่วน
fคือxxxส่วน (ส่วนที่เป็นเศษส่วนของฐาน) ซึ่งมีค่า 52 บิตที่สำคัญที่สุด
ในทางกลับกันรูปแบบบิต (กำหนดโดยเครื่องหมายsเลขชี้กำลังeและเศษส่วนfแต่ละจำนวนเต็ม) แทนจำนวน:
(s ? -1 : 1) * 2 ** (e - 1023) * (1 + f / (2 ** 52))
ท้าทาย
ให้จำนวนจริงnเอาท์พุทส่วนเศษ 52- บิตของการdoubleเป็นตัวแทนของnจำนวนเต็ม
กรณีทดสอบ
0.0 => 0
1.2 => 900719925474099 (hex 3333333333333)
3.1 => 2476979795053773 (hex 8cccccccccccd)
3.5 => 3377699720527872 (hex c000000000000)
10.0 => 1125899906842624 (hex 4000000000000)
1234567.0 => 798825262350336 (hex 2d68700000000)
1e-256 => 2258570371166019 (hex 8062864ac6f43)
1e+256 => 1495187628212028 (hex 54fdd7f73bf3c)
-0.0 => 0
-1.2 => 900719925474099 (hex 3333333333333)
-3.1 => 2476979795053773 (hex 8cccccccccccd)
-3.5 => 3377699720527872 (hex c000000000000)
-10.0 => 1125899906842624 (hex 4000000000000)
-1234567.0 => 798825262350336 (hex 2d68700000000)
-1e-256 => 2258570371166019 (hex 8062864ac6f43)
-1e+256 => 1495187628212028 (hex 54fdd7f73bf3c)
คุณสามารถตรวจสอบหมายเลขอื่น ๆ โดยใช้การอ้างอิง C นี้ซึ่งใช้เขตข้อมูลบิตและสหภาพ
โปรดทราบว่าคำตอบที่คาดว่าจะเหมือนกันสำหรับการ+nและตัวเลขใด-n ๆn
อินพุตและเอาต์พุต
ใช้กฎมาตรฐาน
รูปแบบอินพุตที่ยอมรับ:
- ตัวเลข floating-point อย่างน้อยก็มี
doubleความแม่นยำภายใน - การแสดงสตริงของตัวเลขเป็นทศนิยม (คุณไม่จำเป็นต้องสนับสนุนสัญลักษณ์ทางวิทยาศาสตร์เนื่องจากคุณสามารถใช้
1000...00หรือ0.0000...01เป็นอินพุต)
สำหรับเอาต์พุตข้อผิดพลาดในการปัดเศษที่บิตที่มีนัยสำคัญน้อยที่สุดจะยอมรับได้
สภาพการชนะ
นี่คือโค้ดกอล์ฟดังนั้นไบต์ต่ำสุดในแต่ละภาษาชนะ