กลับไปหน้าบทความ

อ่าน 19 นาที

อีไออี 754

มาตรฐานIEEE สำหรับการคำนวณเลขทศนิยม ( IEEE 754 ) เป็นมาตรฐานทางเทคนิค สำหรับการคำนวณเลขทศนิยมซึ่งกำหนดขึ้นครั้งแรกในปี 1985 โดยสถาบันวิศวกรรมไฟฟ้าและอิเล็กทรอนิกส์ (IEEE)

อีไออี 754

มาตรฐานIEEE สำหรับการคำนวณเลขทศนิยม ( IEEE 754 ) เป็นมาตรฐานทางเทคนิค สำหรับการคำนวณเลขทศนิยมซึ่งกำหนดขึ้นครั้งแรกในปี 1985 โดยสถาบันวิศวกรรมไฟฟ้าและอิเล็กทรอนิกส์ (IEEE) มาตรฐานนี้ได้แก้ไขปัญหาหลายประการที่พบในการใช้งานเลขทศนิยมที่หลากหลาย ซึ่งทำให้ยากต่อการใช้งานอย่างน่าเชื่อถือและพกพาได้หน่วยประมวลผลเลขทศนิยมในฮาร์ดแวร์จำนวนมากใช้มาตรฐาน IEEE 754

มาตรฐานนี้กำหนดไว้ดังนี้:

  • รูปแบบทางคณิตศาสตร์:ชุด ข้อมูล เลขฐานสองและเลขฐานสิบแบบจุดลอยตัว ซึ่งประกอบด้วยจำนวนจำกัด (รวมถึงศูนย์ที่มีเครื่องหมายและจำนวนซับนอร์มัล ) ค่า อนันต์และค่าพิเศษ "ไม่ใช่ตัวเลข" ( NaN )
  • รูปแบบการแลกเปลี่ยนข้อมูล:การเข้ารหัส (สตริงบิต) ที่อาจใช้ในการแลกเปลี่ยนข้อมูลทศนิยมได้อย่างมีประสิทธิภาพและกะทัดรัด
  • กฎการปัดเศษ:คุณสมบัติที่ต้องปฏิบัติตามเมื่อปัดเศษตัวเลขระหว่างการคำนวณทางคณิตศาสตร์และการแปลงหน่วย
  • การดำเนินการ:การคำนวณทางคณิตศาสตร์และการดำเนินการอื่นๆ (เช่นฟังก์ชันตรีโกณมิติ ) บนรูปแบบทางคณิตศาสตร์
  • การจัดการข้อผิดพลาด:การบ่งชี้สภาวะผิดปกติ (เช่นการหารด้วยศูนย์ , ค่าเกินขีดจำกัด ฯลฯ)

มาตรฐาน IEEE 754-2008ซึ่งเผยแพร่ในเดือนสิงหาคม พ.ศ. 2551 ประกอบด้วยเนื้อหาเกือบทั้งหมดของ มาตรฐาน IEEE 754-1985 เดิม รวมทั้ง มาตรฐาน IEEE 854-1987 (การคำนวณเลขทศนิยมแบบไม่ขึ้นกับฐาน) ด้วยเวอร์ชันปัจจุบัน IEEE 754-2019 ได้รับการเผยแพร่ในเดือนกรกฎาคม พ.ศ. 2562 [ 1 ]เป็นการแก้ไขเล็กน้อยจากเวอร์ชันก่อนหน้า โดยส่วนใหญ่เป็นการชี้แจง แก้ไขข้อบกพร่อง และแนะนำการดำเนินการใหม่

ประวัติศาสตร์

ลำดับเหตุการณ์ของมาตรฐานการคำนวณเลขทศนิยม
ปี มาตรฐานอย่างเป็นทางการ
พ.ศ. 2525 IEC 559:1982
พ.ศ. 2528 IEEE 754-1985
พ.ศ. 2530 IEEE 854-1987
1989 IEC 559:1989
2008 IEEE 754-2008
2011 ISO/IEC/IEEE 60559:2011
2019 IEEE 754-2019
2020 ISO/IEC 60559:2020
2029 รอประกาศ

ความจำเป็นในการกำหนดมาตรฐานเลขทศนิยมเกิดขึ้นจากความสับสนวุ่นวายในอุตสาหกรรมการคำนวณทางธุรกิจและวิทยาศาสตร์ในช่วงทศวรรษ 1960 และ 1970 IBM ใช้รูปแบบเลขทศนิยมฐานสิบหกโดยใช้เจ็ดบิตสำหรับเลขชี้กำลังเสมอโดยไม่คำนึงถึงความแม่นยำ คอมพิวเตอร์ CDCและCrayใช้ การแสดงผล แบบส่วนเติมเต็มหนึ่งซึ่งยอมรับค่า +0 และ −0 คอมพิวเตอร์ 60 บิตของ CDC ไม่มีตัวบวก 60 บิตเต็มรูปแบบ ดังนั้นการคำนวณเลขจำนวนเต็มจึงถูกจำกัดด้วยความแม่นยำ 48 บิตจากหน่วยประมวลผลเลขทศนิยม การประมวลผลข้อยกเว้นจากการหารด้วยศูนย์นั้นแตกต่างกันในแต่ละคอมพิวเตอร์ การย้ายข้อมูลระหว่างระบบและแม้แต่การคำนวณซ้ำในระบบต่างๆ ก็มักเป็นเรื่องยาก

มาตรฐาน IEEE ฉบับแรกสำหรับเลขคณิตจุดลอยตัว คือIEEE 754-1985ได้รับการเผยแพร่ในปี 1985 โดยครอบคลุมเฉพาะเลขคณิตจุดลอยตัวแบบไบนารีเท่านั้น

มาตรฐานฉบับใหม่IEEE 754-2008ได้รับการเผยแพร่ในเดือนสิงหาคม 2008 หลังจากกระบวนการแก้ไขปรับปรุงนานเจ็ดปี โดยมี Dan Zuras เป็นประธาน และMike Cowlishaw เป็นผู้เรียบเรียง มาตรฐาน ฉบับนี้ได้เข้ามาแทนที่มาตรฐาน IEEE 754-1985 (เลขคณิตจุดลอยตัวแบบไบนารี) และIEEE 854-1987 (เลขคณิตจุดลอยตัวแบบไม่ขึ้นกับฐาน) รูปแบบไบนารีในมาตรฐานเดิมได้ถูกรวมไว้ในมาตรฐานใหม่นี้ พร้อมด้วยรูปแบบพื้นฐานใหม่สามรูปแบบ ได้แก่ ไบนารีหนึ่งรูปแบบ และทศนิยมสองรูปแบบ เพื่อให้เป็นไปตามมาตรฐานปัจจุบัน การใช้งานจะต้องใช้รูปแบบพื้นฐานอย่างน้อยหนึ่งรูปแบบ ทั้งในฐานะรูปแบบการคำนวณและรูปแบบการแลกเปลี่ยนข้อมูล

มาตรฐานสากลISO/IEC/IEEE 60559:2011 (ที่มีเนื้อหาเหมือนกับ IEEE 754-2008) ได้รับการอนุมัติให้นำไปใช้ผ่านISO / IEC JTC 1 /SC 25 ภายใต้ข้อตกลง ISO/IEEE PSDO [ 2 ] [ 3 ]และเผยแพร่แล้ว[ 4 ]

เวอร์ชันปัจจุบัน IEEE 754-2019 ที่เผยแพร่ในเดือนกรกฎาคม 2019 ได้รับการพัฒนาและแทนที่ IEEE 754-2008 หลังจากกระบวนการแก้ไขที่เริ่มต้นในเดือนกันยายน 2015 โดยมี David G. Hough เป็นประธาน และ Mike Cowlishaw เป็นผู้แก้ไข โดยส่วนใหญ่ประกอบด้วยการชี้แจงเพิ่มเติม (เช่นtotalOrder ) และการแก้ไขข้อบกพร่อง (เช่นminNum ) แต่ยังรวมถึงการดำเนินการที่แนะนำใหม่บางอย่าง (เช่นaugmentedAddition ) ด้วย [ 5 ] [ 6 ]

มาตรฐานสากลISO/IEC 60559:2020 (ที่มีเนื้อหาเหมือนกับ IEEE 754-2019) ได้รับการอนุมัติให้นำไปใช้ผ่าน ISO/IEC JTC 1 /SC 25 และเผยแพร่แล้ว[ 7 ]

การแก้ไขมาตรฐานครั้งต่อไปที่คาดการณ์ไว้คือในปี 2029 [ 8 ]

รูปแบบ

IEEE 754 กำหนดรูปแบบเป็น "ชุดของการแสดงค่าตัวเลขและสัญลักษณ์ อาจมีการเข้ารหัสประกอบด้วย" [ 9 ]

รูปแบบจุดลอยตัวถูกกำหนดโดย

  • ฐาน (หรือเรียกว่าradix ) bซึ่งในมาตรฐาน IEEE 754 จะเป็น 2 (เลขฐานสอง) หรือ 10 (เลขฐานสิบ)
  • ความแม่นยำp ;
  • ช่วงเลขชี้กำลังตั้งแต่eminถึงemaxโดยที่emin = 1 − emaxหรือเทียบเท่ากับemin = − ( emax − 1) สำหรับรูปแบบ IEEE 754 ทั้งหมด

รูปแบบประกอบด้วย

  • จำนวนจำกัด ซึ่งสามารถอธิบายได้ด้วยจำนวนเต็มสามตัว: s  = เครื่องหมาย (ศูนย์หรือหนึ่ง), c  = ตัวเลขสำคัญ (เรียกอีกอย่างว่าสัมประสิทธิ์หรือแมนทิสซา ) ซึ่งมีจำนวนหลักไม่เกินpเมื่อเขียนในฐานb (กล่าวคือ จำนวนเต็มในช่วงตั้งแต่ 0 ถึงb p  − 1) และq  = เลขชี้กำลังโดยที่eminq  +  p  − 1 ≤ emaxค่าตัวเลขของจำนวนจำกัดดังกล่าวคือ(−1) s × c × b q [ a ] ​​ยิ่งไปกว่า นั้นยังมีค่าศูนย์สองค่า เรียกว่าศูนย์ที่มีเครื่องหมาย : บิตเครื่องหมายระบุว่าศูนย์นั้นเป็น +0 (ศูนย์บวก) หรือ −0 (ศูนย์ลบ)
  • อนันต์สองค่า: +∞ และ −∞
  • NaNสองประเภท(ไม่ใช่ตัวเลข): ​​NaN แบบเงียบ (qNaN) และ NaN ส่งสัญญาณ (sNaN)

ตัวอย่างเช่น ถ้าb = 10, p = 7 และemax = 96 แล้วemin = −95 ตัวเลขสำคัญจะสอดคล้องกับ 0 ≤ c9 999 999และเลขชี้กำลังเป็นไปตามเงื่อนไข−101 ≤ q ≤ 90ดังนั้น จำนวนบวกที่ไม่เป็นศูนย์ที่เล็กที่สุดที่สามารถแสดงได้คือ 1×10 −101และจำนวนที่ใหญ่ที่สุดคือ 9999999×10 90 (9.999999×10 96 ) ดังนั้นช่วงของจำนวนทั้งหมดคือ −9.999999×10 96ถึง 9.999999×10 96จำนวน − b 1− emaxและb 1− emax (ในที่นี้คือ −1×10 −95และ 1×10 −95 ) เป็นจำนวนปกติ ที่เล็กที่สุด (ในแง่ขนาด) จำนวนที่ไม่เป็นศูนย์ระหว่างจำนวนที่เล็กที่สุดเหล่านี้เรียกว่าจำนวนย่อยปกติ

การแสดงผลและการเข้ารหัสในหน่วยความจำ

ตัวเลขบางตัวอาจมีรูปแบบการแสดงผลแบบจุดลอยตัวได้หลายแบบ ตัวอย่างเช่น ถ้าb  = 10 และp  = 7 แล้ว −12.345 สามารถแสดงได้ด้วย −12345×10 −3 , −123450×10 −4และ −1234500×10 −5อย่างไรก็ตาม สำหรับการดำเนินการส่วนใหญ่ เช่น การคำนวณทางคณิตศาสตร์ ผลลัพธ์ (ค่า) จะไม่ขึ้นอยู่กับการแสดงผลของค่าป้อนเข้า

สำหรับรูปแบบเลขฐานสิบ การแสดงผลแบบใดก็ได้ถือว่าถูกต้อง และชุดของการแสดงผลเหล่านี้เรียกว่ากลุ่ม (cohort ) เมื่อผลลัพธ์สามารถมีการแสดงผลได้หลายแบบ มาตรฐานจะระบุว่าควรเลือกสมาชิกใดในกลุ่มนั้น

สำหรับรูปแบบไบนารี การแสดงผลจะมีความเป็นเอกลักษณ์ ตัวเลขทศนิยมส่วนใหญ่ที่มีค่าสัมบูรณ์มากกว่า 2 eminเรียกว่าตัวเลขปกติ (normal number) ตัวเลขเหล่านี้มีส่วนสำคัญ (significand) ที่อยู่ระหว่าง 1 (รวม) และ 2 (ไม่รวม) ดังนั้นจึงมีบิต 1 นำหน้าเสมอ บิตนี้ไม่ได้ถูกจัดเก็บไว้อย่างชัดเจนในการแสดงผล แต่ถูกละไว้โดยปริยาย กฎนี้เรียกว่าข้อกำหนดบิตนำหน้า (leading bit convention ) ข้อกำหนดบิตโดยปริยาย ( implicit bit convention ) หรือข้อกำหนดบิตซ่อน (hidden bit convention ) และทำให้รูปแบบมีความแม่นยำเพิ่มขึ้นอีกหนึ่งบิต เลขชี้กำลังของตัวเลขปกติจะมี "ค่าไบแอส " (bias) เพิ่มเข้ามา และเลขชี้กำลังที่มีค่าไบแอสที่ได้จะเป็นจำนวนเต็มบวกเสมอ ตัวเลขที่เล็กกว่า 2 eminเรียกว่า ตัวเลข ย่อยปกติ (subnormal number) ตัวเลขเหล่านี้แสดงด้วยเลขชี้กำลังที่มีค่าไบแอส 0 ซึ่งแทนeminสำหรับตัวเลขย่อยปกติ จะไม่มีบิต 1 นำหน้าโดยปริยายอีกต่อไป และส่วนสำคัญจะอยู่ระหว่าง 0 และ 1

เนื่องจากความเป็นไปได้ของการเข้ารหัสหลายแบบ (อย่างน้อยในรูปแบบที่เรียกว่ารูปแบบการแลกเปลี่ยน ) NaN อาจมีข้อมูลอื่น ๆ ได้แก่ บิตเครื่องหมาย (ซึ่งไม่มีความหมาย แต่อาจถูกใช้โดยการดำเนินการบางอย่าง) และเพย์โหลดซึ่งมีจุดประสงค์เพื่อข้อมูลการวินิจฉัยที่ระบุแหล่งที่มาของ NaN (แต่เพย์โหลดอาจมีการใช้งานอื่น ๆ เช่นNaN-boxing [ 10 ] [ 11 ] [ 12 ] )

รูปแบบพื้นฐานและการแลกเปลี่ยน

มาตรฐานนี้กำหนดรูปแบบพื้นฐานห้าแบบ ซึ่งตั้งชื่อตามฐานตัวเลขและจำนวนบิตที่ใช้ในการเข้ารหัสการแลกเปลี่ยน มีรูปแบบพื้นฐานเลขฐานสองแบบสำหรับเลขลอยตัวสามแบบ (เข้ารหัสด้วย 32, 64 หรือ 128 บิต) และรูปแบบพื้นฐานเลขฐานสิบแบบสำหรับเลขลอยตัวสองแบบ (เข้ารหัสด้วย 64 หรือ 128 บิต) รูปแบบ binary32และbinary64เป็น รูปแบบ เดี่ยวและคู่ของIEEE 754-1985ตามลำดับ การใช้งานที่สอดคล้องกับมาตรฐานจะต้องใช้งานรูปแบบพื้นฐานอย่างน้อยหนึ่งแบบอย่างสมบูรณ์

มาตรฐานระบุรูปแบบการแลกเปลี่ยนในช่วงความกว้างต่างๆ รวมถึงรูปแบบพื้นฐาน เพื่อรองรับการแลกเปลี่ยนข้อมูลจุดลอยตัวระหว่างการใช้งาน ขนาดฟิลด์เลขชี้กำลังและตัวเลขสำคัญสำหรับแต่ละความกว้างจะถูกกำหนดโดยกฎที่กำหนดไว้ตามความกว้าง[ 13 ]ตารางต่อไปนี้สรุปรูปแบบการแลกเปลี่ยนที่เป็นไปได้บางส่วน (รวมถึงรูปแบบพื้นฐาน)

สำคัญ เลขชี้กำลัง คุณสมบัติ[]
ชื่อ ชื่อสามัญ
ราก
ตัวเลข[ c ]
ตัวเลขทศนิยม[ d ]
นาที แม็กซ์ แม็กซ์วัลบันทึก10  ค่าสูงสุดMINVAL >0 (ปกติ) ค่าต่ำสุด > 0 (ต่ำกว่าปกติ) หมายเหตุ
ไบนารี16ความแม่นยำครึ่งหนึ่ง 2 11 3.31 −14 15 65504 4.816 6.10 × 10 −55.96 × 10 −8ทางแยก
ไบนารี32ความแม่นยำเดี่ยว 2 24 7.22 −126 127 3.40 × 103838.532 1.18 × 10 −381.40 × 10 −45พื้นฐาน
ไบนารี64ความแม่นยำสองเท่า 2 53 15.95 −1022 1023 1.80 × 10308308.255 2.23 × 10 −3084.94 × 10 −324พื้นฐาน
ไบนารี128ความแม่นยำสี่เท่า 2 113 34.02 −16382 16383 1.19 × 1049324932.075 3.36 × 10 −49326.48 × 10 −4966พื้นฐาน
ไบนารี256ความแม่นยำแปดเท่า 2 237 71.34 −262142 262143 1.61 × 1078 91378913.207 2.48 × 10 −789132.25 × 10 −78984ทางแยก
ทศนิยม3210 7 7 −95 96 1.0 × 109797 − 4.34 × 10 −81 × 10 −951 × 10 −101ทางแยก
ทศนิยม6410 16 16 −383 384 1.0 × 10385385 − 4.34 × 10 −171 × 10 −3831 × 10 −398พื้นฐาน
ทศนิยม12810 34 34 −6143 6144 1.0 × 1061456145 − 4.34 × 10 −351 × 10 −61431 × 10 −6176พื้นฐาน

ในตารางด้านบน ค่าจำนวนเต็มเป็นค่าที่แน่นอน ในขณะที่ค่าในรูปแบบทศนิยม (เช่น 1.0) เป็นค่าที่ปัดเศษแล้ว เลขชี้กำลังต่ำสุดที่ระบุไว้ใช้สำหรับจำนวนปกติ การแสดง จำนวนย่อย พิเศษ ช่วยให้สามารถแสดงจำนวนที่เล็กกว่า (ในขนาด) ได้ด้วยความแม่นยำที่ลดลง ตัวอย่างเช่น จำนวนบวกที่เล็กที่สุดที่สามารถแสดงในเลขฐานสอง 64 ได้คือ 2 −1074โดยค่า −1074 มาจาก ค่า emin −1022 และบิตสำคัญทั้งหมด 53 บิต ยกเว้นหนึ่งบิต (2 −1022 − (53 − 1)  = 2 −1074 )

หลักทศนิยมคือความแม่นยำของรูปแบบที่แสดงในรูปของจำนวนหลักทศนิยมที่เทียบเท่ากัน คำนวณได้จากสูตร จำนวนหลัก × log 10 ฐานตัวอย่างเช่น เลขฐานสอง 128 มีความแม่นยำโดยประมาณเท่ากับเลขทศนิยม 34 หลัก

log 10  MAXVALเป็นตัววัดช่วงของการเข้ารหัส ส่วนจำนวนเต็มของมันคือเลขชี้กำลังที่มากที่สุดที่แสดงในผลลัพธ์ของค่าในรูปแบบสัญกรณ์วิทยาศาสตร์ที่มีตัวเลขนำหน้าหนึ่งหลักในส่วนสำคัญก่อนจุดทศนิยม (เช่น 1.698 × 10)38อยู่ใกล้กับค่าที่มากที่สุดในเลขฐานสอง 32 ซึ่งก็คือ 9.999999 × 1096คือค่าที่มากที่สุดในระบบเลขฐานสิบ 32)

รูปแบบไบนารี 32 (เดี่ยว) และไบนารี 64 (คู่) เป็นสองรูปแบบที่ใช้กันทั่วไปมากที่สุดในปัจจุบัน รูปด้านล่างแสดงความแม่นยำสัมบูรณ์สำหรับทั้งสองรูปแบบในช่วงค่าต่างๆ รูปนี้สามารถใช้เพื่อเลือกรูปแบบที่เหมาะสมโดยพิจารณาจากค่าที่คาดหวังของตัวเลขและความแม่นยำที่ต้องการ

ความแม่นยำของเลขฐานสอง 32 และเลขฐานสอง 64 อยู่ในช่วง10⁻¹²ถึง10¹²

ตัวอย่างรูปแบบการจัดวางสำหรับเลขทศลอย 32 บิตคือ

และโครงสร้าง 64 บิตก็คล้ายกัน

รูปแบบความแม่นยำที่ขยายและปรับได้

มาตรฐานระบุ รูปแบบความแม่นยำ แบบขยายและแบบขยายได้ซึ่งเป็นทางเลือก ซึ่งให้ความแม่นยำมากกว่ารูปแบบพื้นฐาน[ 14 ]รูปแบบความแม่นยำแบบขยายจะขยายรูปแบบพื้นฐานโดยใช้ความแม่นยำและช่วงเลขชี้กำลังที่มากขึ้น รูปแบบความแม่นยำแบบขยายได้ช่วยให้ผู้ใช้สามารถระบุความแม่นยำและช่วงเลขชี้กำลังได้ การใช้งานอาจใช้การแสดงภายในใดๆ ก็ได้ที่เลือกสำหรับรูปแบบดังกล่าว สิ่งที่ต้องกำหนดคือพารามิเตอร์ ( b , pและemax ) พารามิเตอร์เหล่านี้อธิบายชุดของจำนวนจำกัด (การรวมกันของเครื่องหมาย ตัวเลขสำคัญ และเลขชี้กำลังสำหรับฐานที่กำหนด) ที่สามารถแสดงได้อย่างเฉพาะเจาะจง

มาตรฐานแนะนำให้มาตรฐานภาษาจัดหาวิธีการระบุpและemaxสำหรับแต่ละฐานbที่ รองรับ [ 15 ]มาตรฐานแนะนำให้มาตรฐานภาษาและการใช้งานรองรับรูปแบบขยายที่มีความแม่นยำมากกว่ารูปแบบพื้นฐานที่ใหญ่ที่สุดที่รองรับสำหรับแต่ละฐานb [ 16 ] สำหรับรูปแบบขยายที่มีความแม่นยำระหว่างสองรูปแบบพื้นฐาน ช่วงเลขชี้กำลังต้องมากเท่ากับรูปแบบพื้นฐานที่กว้างกว่าถัดไป ตัวอย่างเช่น เลขฐานสองที่มีความแม่นยำขยาย 64 บิตจะต้องมี 'emax' อย่างน้อย 16383 รูปแบบขยาย 80 บิต ของ x87 ตรงตามข้อกำหนดนี้

มาตรฐาน IEEE 754-1985ดั้งเดิมยังมีแนวคิดของรูปแบบขยายแต่ไม่มีความสัมพันธ์บังคับระหว่างeminและemaxตัวอย่างเช่นรูปแบบ 80 บิตMotorola 68881 [ 17 ]ซึ่งemin = − emaxเป็นรูปแบบขยายที่สอดคล้องกัน แต่กลายเป็นรูปแบบที่ไม่สอดคล้องในการแก้ไขปี 2008

รูปแบบการแลกเปลี่ยน

รูปแบบการแลกเปลี่ยนข้อมูลมีจุดประสงค์เพื่อการแลกเปลี่ยนข้อมูลทศนิยมโดยใช้สตริงบิตที่มีความยาวคงที่สำหรับรูปแบบที่กำหนด

ไบนารี

สำหรับการแลกเปลี่ยนตัวเลขทศลอยไบนารี จะมีการกำหนดรูปแบบการแลกเปลี่ยนที่มีความยาว 16 บิต, 32 บิต, 64 บิต และจำนวนทวีคูณของ 32 บิต ≥ 128 [ e ]รูปแบบ 16 บิตมีไว้สำหรับการแลกเปลี่ยนหรือจัดเก็บตัวเลขขนาดเล็ก (เช่น สำหรับกราฟิก)

รูปแบบการเข้ารหัสสำหรับรูปแบบการแลกเปลี่ยนไบนารีเหล่านี้เหมือนกับของ IEEE 754-1985 กล่าวคือ บิตเครื่องหมาย ตามด้วย บิตเลขชี้กำลัง wบิตที่อธิบายค่าชดเชยเลขชี้กำลังด้วยค่าไบแอสและ บิต p  − 1 บิตที่อธิบายค่าสำคัญ ความกว้างของฟิลด์เลขชี้กำลังสำหรับ รูปแบบ kบิตคำนวณได้จากw  = round(4 log 2 ( k )) − 13 รูปแบบ 64 และ 128 บิตที่มีอยู่เป็นไปตามกฎนี้ แต่รูปแบบ 16 และ 32 บิตมีบิตเลขชี้กำลังมากกว่า (5 และ 8 ตามลำดับ) ซึ่งสูตรนี้จะให้ได้ (3 และ 7 ตามลำดับ)

เช่นเดียวกับ IEEE 754-1985 ฟิลด์เลขชี้กำลังแบบมีอคติจะถูกเติมด้วยบิต 1 ทั้งหมดเพื่อระบุค่าอนันต์ (ฟิลด์ตัวเลขสำคัญท้ายสุด = 0) หรือค่า NaN (ฟิลด์ตัวเลขสำคัญท้ายสุด ≠ 0) สำหรับค่า NaN นั้น ค่า NaN แบบเงียบและค่า NaN แบบส่งสัญญาณจะถูกแยกแยะโดยใช้บิตที่มีนัยสำคัญที่สุดของฟิลด์ตัวเลขสำคัญท้ายสุดเพียงอย่างเดียว[ f ]และข้อมูลหลักจะถูกส่งในบิตที่เหลือ

ทศนิยม

สำหรับการแลกเปลี่ยนตัวเลขทศนิยมแบบจุดลอยตัว รูปแบบการแลกเปลี่ยนที่มีจำนวนบิตเป็นพหุคูณของ 32 บิตนั้นถูกกำหนดไว้แล้ว เช่นเดียวกับการแลกเปลี่ยนเลขฐานสอง โครงสร้างการเข้ารหัสสำหรับรูปแบบการแลกเปลี่ยนเลขทศนิยมจะเข้ารหัสเครื่องหมาย เลขชี้กำลัง และตัวเลขสำคัญ มีการกำหนดการเข้ารหัสระดับบิตที่แตกต่างกันสองแบบ และการแลกเปลี่ยนมีความซับซ้อนมากขึ้นเนื่องจากอาจจำเป็นต้องมีตัวบ่งชี้ภายนอกบางอย่างของการเข้ารหัสที่ใช้งานอยู่

ตัวเลือกทั้งสองนี้อนุญาตให้เข้ารหัสส่วนสำคัญเป็นลำดับตัวเลขทศนิยมแบบบีบอัดโดยใช้เลขทศนิยมแบบหนาแน่นหรืออีกทางเลือกหนึ่งคือเป็นจำนวนเต็มไบนารี แบบแรกสะดวกกว่าสำหรับการใช้งานฮาร์ดแวร์โดยตรงตามมาตรฐาน ในขณะที่แบบหลังเหมาะสมกว่าสำหรับการจำลองซอฟต์แวร์บนคอมพิวเตอร์ไบนารี ไม่ว่าในกรณีใด ชุดตัวเลข (การรวมกันของเครื่องหมาย ส่วนสำคัญ และเลขชี้กำลัง) ที่สามารถเข้ารหัสได้นั้นเหมือนกัน และค่าพิเศษ (±ศูนย์ที่มีเลขชี้กำลังต่ำสุด ±อนันต์ NaN แบบเงียบ และ NaN แบบส่งสัญญาณ) มีการเข้ารหัสที่เหมือนกัน

กฎการปัดเศษ

มาตรฐานกำหนดกฎการปัดเศษไว้ห้าข้อ กฎสองข้อแรกจะปัดเศษไปยังค่าที่ใกล้เคียงที่สุด ส่วนกฎข้ออื่นๆ เรียกว่าการปัดเศษแบบมีทิศทาง :

ปัดเศษเป็นจำนวนเต็มที่ใกล้ที่สุด

ที่ค่าสุดขั้ว ค่าที่มีขนาดน้อยกว่าอย่างชัดเจนจะถูกปัดเศษเป็นจำนวนจำกัดต่ำสุดหรือสูงสุด (ขึ้นอยู่กับเครื่องหมายของค่า) ตัวเลขใดๆ ที่มีขนาดนี้พอดีจะถือว่าเป็นค่าที่เท่ากัน การเลือกค่าที่เท่ากันนี้อาจถูกมองว่าเป็นจุดกึ่งกลางระหว่างและซึ่งหากเลขชี้กำลังไม่จำกัด จะเป็นตัวเลขทศนิยมที่สามารถแสดงได้ถัดไปที่มีขนาดใหญ่กว่า ตัวเลขที่มีขนาดใหญ่กว่าk อย่างชัดเจน จะถูกปัดเศษเป็นอนันต์ที่สอดคล้องกัน[ 18 ]

"ปัดเศษให้ใกล้เคียงที่สุด หากมีค่าเท่ากันให้ปัดเป็นเลขคู่" เป็นค่าเริ่มต้นสำหรับเลขฐานสองแบบลอยตัว และเป็นค่าเริ่มต้นที่แนะนำสำหรับเลขฐานสิบ "ปัดเศษให้ใกล้เคียงที่สุด หากมีค่าเท่ากันให้ปัดออก" จำเป็นเฉพาะสำหรับการใช้งานเลขฐานสิบเท่านั้น[ 19 ]

การปัดเศษแบบกำหนดทิศทาง

  • ปัดเศษเข้าหา 0  – การปัดเศษเข้าหาศูนย์โดยตรง (หรือเรียกว่าการตัดทิ้ง )
  • ปัดเศษเข้าหา +∞  – การปัดเศษเข้าหาค่าอนันต์บวก (เรียกอีกอย่างว่าการปัดขึ้นหรือปัดขึ้นด้านบน )
  • ปัดเศษเข้าหา −∞  – การปัดเศษเข้าหาค่าลบอนันต์ (หรือที่เรียกว่าการปัดลงหรือ ปัดเศษ ลงพื้น )
ตัวอย่างการปัดเศษเป็นจำนวนเต็มโดยใช้กฎ IEEE 754
โหมดค่าตัวอย่าง
+11.5 +12.5 −11.5 −12.5
ไปยังจุดที่ใกล้ที่สุด ผูกกับแม้กระทั่ง +12.0 +12.0 -12.0 -12.0
ปัดเศษให้ใกล้เคียงที่สุด หากมีค่าเท่ากัน ให้ปัดเศษให้ห่างจากศูนย์ +12.0 +13.0 -12.0 -13.0
มุ่งสู่ 0 +11.0 +12.0 -11.0 -12.0
มุ่งสู่ +∞ +12.0 +13.0 -11.0 -12.0
มุ่งสู่ −∞ +11.0 +12.0 -12.0 -13.0

เว้นแต่จะระบุไว้เป็นอย่างอื่น ผลลัพธ์จุดลอยตัวของการดำเนินการจะถูกกำหนดโดยการใช้ฟังก์ชันการปัดเศษกับผลลัพธ์ที่แม่นยำอย่างไม่มีที่สิ้นสุด (ทางคณิตศาสตร์) การดำเนินการดังกล่าวเรียกว่ามีการปัดเศษอย่างถูกต้องข้อกำหนดนี้เรียกว่าการปัดเศษที่ถูกต้อง[ 20 ]

การดำเนินการที่จำเป็น

การดำเนินการที่จำเป็นสำหรับรูปแบบทางคณิตศาสตร์ที่รองรับ (รวมถึงรูปแบบพื้นฐาน) มีดังนี้:

  • การแปลงไปและกลับจากจำนวนเต็ม[ 21 ] [ 22 ]
  • ค่าที่ต่อเนื่องกันก่อนหน้าและถัดไป[ 21 ]
  • การดำเนินการทางคณิตศาสตร์ (บวก ลบ คูณ หาร รากที่สองการคูณบวกแบบผสม เศษเหลือค่าต่ำสุด ค่าสูงสุด) [ 21 ] [ 22 ]
  • การแปลง (ระหว่างรูปแบบ ไปและกลับจากสตริง ฯลฯ) [ 23 ] [ 24 ]
  • การปรับขนาดและ (สำหรับทศนิยม) การหาปริมาณ[ 25 ] [ 26 ]
  • การคัดลอกและการจัดการเครื่องหมาย (abs, negate, เป็นต้น) [ 27 ]
  • การเปรียบเทียบและลำดับโดยรวม[ 28 ] [ 29 ]
  • การจำแนกประเภทของตัวเลข (ต่ำกว่าปกติ จำกัด ฯลฯ) และการทดสอบหาค่า NaN [ 30 ]
  • การทดสอบและการตั้งค่าแฟล็กสถานะ[ 31 ]

ตัวบ่งชี้การเปรียบเทียบ

มาตรฐานนี้จัดเตรียมตัวบ่งชี้การเปรียบเทียบเพื่อเปรียบเทียบข้อมูลจุดลอยตัวหนึ่งกับอีกข้อมูลหนึ่งในรูปแบบเลขคณิตที่รองรับ[ 32 ]การเปรียบเทียบใดๆ กับ NaN จะถือว่าไม่มีลำดับ −0 และ +0 ถือว่าเท่ากัน

述语ลำดับทั้งหมด

มาตรฐานนี้จัดเตรียมพรีดิเคตtotalOrderซึ่งกำหนดลำดับทั้งหมดบนสมาชิกแคนอนิกของรูปแบบเลขคณิตที่รองรับ[ 33 ]พรีดิเคตนี้สอดคล้องกับพรีดิเคตการเปรียบเทียบ (ดูหัวข้อ§ พรีดิเคตการเปรียบเทียบ ) เมื่อจำนวนจุดลอยตัวหนึ่งน้อยกว่าอีกจำนวนหนึ่ง ความแตกต่างหลักคือ: [ 34 ]

  • ค่า NaN สามารถเรียงลำดับได้
    • ค่า NaN จะถูกพิจารณาเสมือนว่ามีค่าสัมบูรณ์มากกว่าค่าอนันต์ (หรือค่าทศนิยมอื่นๆ) (−NaN < −Infinity; +Infinity < +NaN)
    • qNaN และ sNaN จะได้รับการปฏิบัติเสมือนว่า qNaN มีค่าสัมบูรณ์มากกว่า sNaN (−qNaN < −sNaN; +sNaN < +qNaN.)
    • จากนั้นค่า NaN จะถูกจัดเรียงตามขนาดของข้อมูล ในมาตรฐาน IEEE 754-2008 ค่า NaN ที่มีขนาดของข้อมูลน้อยกว่าจะถูกพิจารณาว่ามีค่าสัมบูรณ์น้อยกว่า ในมาตรฐาน IEEE 754-2019 การจัดเรียงใดๆ ที่กำหนดโดยการใช้งานนั้นเป็นที่ยอมรับได้
  • ค่าศูนย์ลบถือว่ามีค่าน้อยกว่าค่าศูนย์บวก
  • หากทั้งสองด้านของการเปรียบเทียบอ้างอิงถึงข้อมูลจุดลอยตัวเดียวกัน ข้อมูลที่มีเลขชี้กำลังน้อยกว่าจะถือว่ามีค่าสัมบูรณ์น้อยกว่า[ 33 ]

เงื่อนไข totalOrderไม่ได้กำหนดลำดับทั้งหมดให้กับการเข้ารหัสทั้งหมดในรูปแบบ โดยเฉพาะอย่างยิ่ง มันไม่ได้แยกแยะความแตกต่างระหว่างการเข้ารหัสที่แตกต่างกันของการแสดงจุดลอยตัวเดียวกัน เช่น เมื่อการเข้ารหัสหนึ่งหรือทั้งสองไม่ใช่แบบมาตรฐาน[ 33 ] IEEE 754-2019 ได้รวมคำชี้แจงเกี่ยวกับtotalOrderไว้ ด้วย

สำหรับรูปแบบการแลกเปลี่ยนไบนารีที่มีการเข้ารหัสตามคำแนะนำ IEEE 754-2008 เกี่ยวกับการวางบิตสัญญาณ NaNการเปรียบเทียบจะเหมือนกับการเปรียบเทียบที่แปลงเลขทศนิยมเป็นจำนวนเต็มแบบเครื่องหมาย-ขนาด (โดยสมมติว่าลำดับเพย์โหลดสอดคล้องกับการเปรียบเทียบนี้) ซึ่งเป็นเทคนิคเก่าสำหรับการเปรียบเทียบ FP โดยไม่มี FPU [ 35 ]

การจัดการข้อยกเว้น

มาตรฐานกำหนดข้อยกเว้นไว้ห้าประการ โดยแต่ละข้อยกเว้นจะส่งคืนค่าเริ่มต้นและมีแฟล็กสถานะที่สอดคล้องกันซึ่งจะถูกยกขึ้นเมื่อเกิดข้อยกเว้น[ g ] ไม่จำเป็นต้องมีการจัดการข้อยกเว้นอื่นใด แต่ขอแนะนำให้ใช้วิธีการอื่นที่ไม่ใช่ค่าเริ่มต้น (ดู§ การจัดการข้อยกเว้นทางเลือก )

ข้อยกเว้นที่เป็นไปได้ห้าประการ ได้แก่

การดำเนินการไม่ถูกต้อง
ไม่สามารถหาค่าทางคณิตศาสตร์ได้ เช่น รากที่สองของจำนวนลบ โดยค่าเริ่มต้นจะส่งคืนค่า qNaN
การหารด้วยศูนย์
การดำเนินการกับตัวถูกดำเนินการที่มีค่าจำกัดจะให้ผลลัพธ์เป็นอนันต์ที่แน่นอน เช่น 1/0 หรือ log(0) โดยค่าเริ่มต้นจะส่งคืนค่า ±อนันต์
ล้น
ผลลัพธ์ที่มีค่าจำกัดนั้นมีขนาดใหญ่เกินกว่าที่จะแสดงได้อย่างแม่นยำ (เช่น เลขชี้กำลังที่มีช่วงเลขชี้กำลังไม่จำกัดจะมีค่ามากกว่าemax ) โดยค่าเริ่มต้น จะส่งคืนค่า ±infinity สำหรับโหมดการปัดเศษแบบใกล้เคียงที่สุด (และปฏิบัติตามกฎการปัดเศษสำหรับโหมดการปัดเศษแบบกำหนดทิศทาง)
น้ำไหลลง
ผลลัพธ์ที่ได้มีขนาดเล็กมาก (อยู่นอกช่วงปกติ) โดยค่าเริ่มต้น จะส่งคืนค่าที่น้อยกว่าหรือเท่ากับค่าบวกปกติขั้นต่ำในแง่ของขนาด (ตามกฎการปัดเศษ) ค่าที่ต่ำกว่าปกติจะบ่งชี้ถึงข้อยกเว้นการเกิดอันเดอร์โฟลว์เสมอ แต่โดยค่าเริ่มต้น หากค่าที่ได้ตรงเป๊ะ จะไม่มีการแจ้งเตือนใดๆ
ไม่แม่นยำ
ผลลัพธ์ที่แท้จริง (เช่น ผลลัพธ์ที่ไม่ปัดเศษ) ไม่สามารถแสดงได้อย่างแม่นยำ โดยค่าเริ่มต้น จะส่งคืนผลลัพธ์ที่ปัดเศษอย่างถูกต้อง

ข้อยกเว้นทั้งห้าข้อนี้เหมือนกับที่กำหนดไว้ใน IEEE 754-1985 แต่ ข้อยกเว้น การหารด้วยศูนย์ได้ขยายไปถึงการดำเนินการอื่นนอกเหนือจากการหารด้วย จำนวนเต็ม

การใช้งานจุดลอยตัวทศนิยมบางแบบกำหนดข้อยกเว้นเพิ่มเติม[ 36 ] [ 37 ]ซึ่งไม่ได้เป็นส่วนหนึ่งของ IEEE 754:

ยึดแน่น
เลขชี้กำลังของผลลัพธ์มีขนาดใหญ่เกินไปสำหรับรูปแบบปลายทาง โดยค่าเริ่มต้น ระบบจะเพิ่มเลขศูนย์ต่อท้ายสัมประสิทธิ์เพื่อลดเลขชี้กำลังให้เหลือค่าที่ใช้งานได้มากที่สุด หากไม่สามารถทำได้ (เนื่องจากจะทำให้จำนวนหลักที่ต้องการมากกว่ารูปแบบปลายทาง) จะเกิดข้อผิดพลาดโอเวอร์โฟลว์ขึ้น
กลม
ค่าสัมประสิทธิ์ของผลลัพธ์ต้องการจำนวนหลักมากกว่าที่รูปแบบปลายทางกำหนดไว้ หากมีการละทิ้งหลักที่ไม่ใช่ศูนย์ ระบบจะแจ้งข้อผิดพลาดที่ไม่แม่นยำ

คุณค่าพิเศษ

ศูนย์ที่มีเครื่องหมาย

ในมาตรฐาน IEEE 754 ค่าศูนย์จะมีเครื่องหมาย หมายความว่ามีทั้ง "ศูนย์บวก" (+0) และ "ศูนย์ลบ" (−0) ในสภาพแวดล้อมการทำงาน ส่วนใหญ่ ศูนย์บวกมักจะแสดงเป็น " 0" และศูนย์ลบเป็น " -0" ค่าทั้งสองนี้ถือว่าเท่ากันในการเปรียบเทียบเชิงตัวเลข แต่บางการดำเนินการอาจให้ผลลัพธ์ที่แตกต่างกันสำหรับ +0 และ −0 ตัวอย่างเช่น1/(−0)จะให้ค่าลบอนันต์ ในขณะที่1/(+0)จะให้ค่าบวกอนันต์ (เพื่อให้สมการ1/(1/±∞) = ±∞ยังคงอยู่) ฟังก์ชันทั่วไปอื่นๆ ที่มีความไม่ต่อเนื่องที่x = 0ซึ่งอาจปฏิบัติต่อ +0 และ −0 แตกต่างกัน ได้แก่Γ( x )และรากที่สองหลักของy + xiสำหรับจำนวนลบใดๆyเช่นเดียวกับวิธีการประมาณค่าใดๆ การดำเนินการที่เกี่ยวข้องกับ "ศูนย์ลบ" อาจทำให้เกิดความสับสนได้ในบางครั้ง ตัวอย่างเช่น ใน IEEE 754 x = yไม่ได้หมายความว่า1/ x = 1/ y เสมอไป เนื่องจาก0 = −0แต่1/0 ≠ 1/(−0) [ 38 ] ยิ่งไปกว่านั้น รากที่สองผกผัน[ h ]ของ±0คือ±∞ในขณะที่ฟังก์ชันทางคณิตศาสตร์บนจำนวนจริงไม่มีค่าลบใดๆ

ตัวเลขต่ำกว่าปกติ

ค่าต่ำกว่าปกติจะเติม ช่องว่าง การไหลต่ำกว่าปกติด้วยค่าที่ระยะห่างสัมบูรณ์ระหว่างค่าเหล่านั้นเท่ากับระยะห่างของค่าที่อยู่ติดกันซึ่งอยู่นอกช่องว่างการไหลต่ำกว่าปกติ นี่เป็นการปรับปรุงจากการปฏิบัติแบบเดิมที่ปล่อยให้ช่องว่างการไหลต่ำกว่าปกติเป็นศูนย์ และผลลัพธ์ที่ไหลต่ำกว่าปกติจะถูกแทนที่ด้วยศูนย์ (ล้างเป็นศูนย์) [ 39 ]

ฮาร์ดแวร์คำนวณเลขทศนิยมสมัยใหม่โดยทั่วไปสามารถจัดการกับค่าที่ต่ำกว่าค่าปกติ (รวมถึงค่าปกติ) ได้ และไม่จำเป็นต้องใช้ซอฟต์แวร์จำลองสำหรับค่าที่ต่ำกว่าค่าปกติ

อนันต์

ค่าอนันต์บนเส้นจำนวนจริงแบบขยายสามารถแสดงได้ด้วยชนิดข้อมูลจุดลอยตัวของ IEEE เช่นเดียวกับค่าจุดลอยตัวทั่วไป เช่น 1, 1.5 เป็นต้น ค่าเหล่านี้ไม่ใช่ค่าความผิดพลาดแต่อย่างใด แม้ว่ามักจะถูกใช้เป็นค่าทดแทนเมื่อเกิดการโอเวอร์โฟลว์ (ขึ้นอยู่กับการปัดเศษ) ในกรณีที่เกิดข้อยกเว้นการหารด้วยศูนย์ ค่าอนันต์บวกหรือลบจะถูกส่งกลับมาเป็นผลลัพธ์ที่ถูกต้อง นอกจากนี้ยังสามารถแทนค่าอนันต์ด้วยตัวเลขได้ (เช่น มาโคร "INFINITY" ในภาษา C หรือ " " หากภาษาโปรแกรมอนุญาตให้ใช้ไวยากรณ์นั้น)

มาตรฐาน IEEE 754 กำหนดให้ต้องจัดการกับค่าอนันต์อย่างเหมาะสม เช่น

  • (+∞) + (+7) = (+∞)
  • (+∞) × (−2) = (−∞)
  • (+∞) × 0 = NaN – ไม่มีสิ่งใดที่มีความหมายให้ทำ

NaNs

มาตรฐาน IEEE 754 กำหนดค่าพิเศษที่เรียกว่า "ไม่ใช่ตัวเลข" (NaN) ให้เป็นผลลัพธ์ของการดำเนินการ "ไม่ถูกต้อง" บางอย่าง เช่น 0/0, ∞×0หรือ sqrt(−1) โดยทั่วไปแล้ว ค่า NaN จะถูกส่งต่อไปยังการดำเนินการอื่นๆ กล่าวคือ การดำเนินการส่วนใหญ่ที่เกี่ยวข้องกับ NaN จะให้ผลลัพธ์เป็น NaN แม้ว่าฟังก์ชันที่ให้ผลลัพธ์ที่กำหนดไว้สำหรับค่าทศนิยมใดๆ ก็ตาม จะให้ผลลัพธ์เช่นเดียวกันสำหรับ NaN ด้วย เช่น NaN ^ 0 = 1 NaN มีสองประเภท ได้แก่ NaN แบบเงียบ ตามค่าเริ่มต้น และ NaN แบบส่งสัญญาณ (ถ้ามี) NaN แบบส่งสัญญาณในการดำเนินการทางคณิตศาสตร์ใดๆ (รวมถึงการเปรียบเทียบตัวเลข) จะทำให้ เกิด ข้อยกเว้น "การดำเนินการไม่ถูกต้อง"

การแสดงค่า NaN ที่ระบุโดยมาตรฐานนั้นมีบิตที่ไม่ระบุบางส่วนที่สามารถใช้เข้ารหัสประเภทหรือแหล่งที่มาของข้อผิดพลาดได้ แต่ไม่มีมาตรฐานสำหรับการเข้ารหัสดังกล่าว ในทางทฤษฎีระบบรันไทม์ สามารถใช้สัญญาณ NaN เพื่อระบุตัวแปรที่ไม่ได้เริ่มต้น หรือขยายตัวเลขทศนิยมด้วยค่าพิเศษอื่นๆ โดยไม่ทำให้การคำนวณด้วยค่าปกติช้าลง แม้ว่าการขยายดังกล่าวจะไม่เป็นที่นิยมก็ตาม รูปแบบหนึ่งของวิธีการนี้ (บางครั้งเรียกว่า "NaN-boxing") ถูกใช้โดยรันไทม์JavaScript บางตัว [ 40 ]และLuaJIT [ 41 ]เพื่อจัดเก็บค่าตัวชี้ 64 บิตและค่าทศนิยมความแม่นยำสองเท่า IEEE 754 ในประเภทข้อมูลเดียวกัน ทำให้รันไทม์สามารถกำจัดค่าใช้จ่ายเพิ่มเติมของการจัดสรรหน่วยความจำและการอ้างอิงทางอ้อมสำหรับค่าทศนิยมได้

เหตุผลในการออกแบบ

วิลเลียม คาฮานสถาปนิกหลักของตัวประมวลผลร่วมจุดลอยตัว Intel 80x87และมาตรฐานจุดลอยตัว IEEE 754

เป็นความเข้าใจผิดที่พบได้ทั่วไปว่า คุณสมบัติที่ซับซ้อนกว่าของมาตรฐาน IEEE 754 ที่กล่าวถึงในที่นี้ เช่น รูปแบบเพิ่มเติม ค่า NaN ค่าอนันต์ ค่าซับนอร์มัล เป็นต้น เป็นสิ่งที่น่าสนใจเฉพาะสำหรับนักวิเคราะห์เชิงตัวเลข หรือสำหรับแอปพลิเคชันเชิงตัวเลขขั้นสูงเท่านั้น ในความเป็นจริงแล้วตรงกันข้าม คุณสมบัติเหล่านี้ถูกออกแบบมาเพื่อให้ค่าเริ่มต้นที่ปลอดภัยและแข็งแกร่งสำหรับโปรแกรมเมอร์ที่ไม่เชี่ยวชาญด้านตัวเลข นอกจากนี้ยังช่วยสนับสนุนไลบรารีเชิงตัวเลขที่ซับซ้อนโดยผู้เชี่ยวชาญอีกด้วยวิลเลียม คาฮานนักออกแบบหลักของ IEEE 754 ตั้งข้อสังเกตว่าไม่ถูกต้องที่จะ "... พิจารณาคุณสมบัติของมาตรฐาน IEEE 754 สำหรับการคำนวณเลขทศลอยแบบไบนารีที่... ไม่ได้รับการยอมรับว่าเป็นคุณสมบัติที่ใช้งานได้เฉพาะผู้เชี่ยวชาญด้านตัวเลขเท่านั้น ข้อเท็จจริงกลับตรงกันข้าม ในปี 1977 คุณสมบัติเหล่านั้นได้รับการออกแบบลงใน Intel 8087 เพื่อรองรับตลาดที่กว้างที่สุดเท่าที่จะเป็นไปได้... การวิเคราะห์ข้อผิดพลาดบอกเราถึงวิธีการออกแบบการคำนวณเลขทศลอย เช่น มาตรฐาน IEEE 754 ให้สามารถทนต่อความไม่รู้โดยเจตนาดีของโปรแกรมเมอร์ได้ในระดับปานกลาง" [ 42 ]

  • ค่าพิเศษ เช่น อนันต์และ NaN ช่วยให้มั่นใจได้ว่าการคำนวณเลขทศนิยมมีความสมบูรณ์ทางพีชคณิต: การดำเนินการเลขทศนิยมทุกครั้งจะให้ผลลัพธ์ที่กำหนดไว้อย่างดี และโดยค่าเริ่มต้นจะไม่ทำให้เกิดการขัดจังหวะหรือข้อผิดพลาดของเครื่อง นอกจากนี้ การเลือกค่าพิเศษที่ส่งคืนในกรณีพิเศษได้รับการออกแบบมาเพื่อให้ได้คำตอบที่ถูกต้องในหลายกรณี ตัวอย่างเช่น ภายใต้การคำนวณเลขคณิต IEEE 754 เศษส่วนต่อเนื่องเช่นสามารถนำไปใช้ได้อย่างตรงไปตรงมาและจะให้คำตอบที่ถูกต้องแม้ว่าจะมีการหารด้วยศูนย์ ก็ตาม เนื่องจากจำนวนบวกใดๆ ที่หารด้วยศูนย์จะได้ผลลัพธ์เป็น+∞เช่น เมื่อz = 3 , R ( z ) = 7 [ 43 ] ดังที่ Kahan ตั้งข้อสังเกต ข้อผิดพลาดที่ไม่ได้จัดการซึ่งเกิดขึ้นหลังจากการแปลงเลขทศนิยมเป็นจำนวนเต็ม 16 บิตเกินพิกัด ซึ่งทำให้ จรวด Ariane 5 เสียหายจะไม่เกิดขึ้นภายใต้นโยบายเลขทศนิยม IEEE 754 เริ่มต้น[ 42 ]
  • ตัวเลขย่อยปกติทำให้มั่นใจได้ว่าสำหรับตัวเลขจุดลอยตัวจำกัดxและyนั้นxy = 0ก็ต่อเมื่อx = yตามที่คาดไว้ แต่สิ่งนี้ไม่เป็นจริงภายใต้การแสดงจุดลอยตัวก่อนหน้านี้[ 44 ]
  • เกี่ยวกับการออกแบบรูปแบบ x87 80 บิต Kahan ตั้งข้อสังเกตว่า: "รูปแบบขยายนี้ได้รับการออกแบบมาเพื่อใช้งานโดยมีการสูญเสียความเร็วเพียงเล็กน้อย สำหรับการคำนวณทางคณิตศาสตร์ที่ง่ายที่สุดกับตัวดำเนินการ float และ double ตัวอย่างเช่น ควรใช้สำหรับตัวแปรชั่วคราวในลูปที่ใช้การคำนวณแบบเวียนเกิด เช่น การประเมินพหุนาม ผลคูณสเกลาร์ เศษส่วนบางส่วนและเศษส่วนต่อเนื่อง มักจะช่วยป้องกันการเกิด Over/Underflow ก่อนกำหนด หรือการยกเลิกเฉพาะที่อย่างรุนแรงที่อาจทำให้ขั้นตอนวิธีง่ายๆ เสียหายได้" [ 45 ]การคำนวณผลลัพธ์ระดับกลางในรูปแบบขยายที่มีความแม่นยำสูงและเลขชี้กำลังแบบขยายมีตัวอย่างในอดีตของการคำนวณ ทางวิทยาศาสตร์ และในการออกแบบเครื่องคิดเลขวิทยาศาสตร์เช่นเครื่องคิดเลขทางการเงินของHewlett-Packardดำเนินการคำนวณทางคณิตศาสตร์และฟังก์ชันทางการเงินได้ถึงทศนิยมที่สำคัญกว่าที่จัดเก็บหรือแสดงผลถึงสามตำแหน่ง[ 45 ]การนำความแม่นยำที่ขยายออกไปมาใช้ทำให้สามารถพัฒนาไลบรารีฟังก์ชันพื้นฐานมาตรฐานได้อย่างง่ายดาย ซึ่งโดยปกติจะให้ผลลัพธ์ความแม่นยำสองเท่าภายในหนึ่งหน่วยในหลักสุดท้าย (ULP) ด้วยความเร็วสูง
  • การปัดเศษค่าให้ถูกต้องโดยปัดให้ใกล้เคียงที่สุดเท่าที่จะทำได้ จะช่วยหลีกเลี่ยงอคติที่เป็นระบบในการคำนวณและชะลอการเพิ่มขึ้นของข้อผิดพลาด การปัดเศษค่าที่เท่ากันให้เป็นเลขคู่จะช่วยขจัดอคติทางสถิติที่อาจเกิดขึ้นในการบวกตัวเลขที่คล้ายกัน
  • การปัดเศษแบบกำหนดทิศทางมีจุดประสงค์เพื่อช่วยตรวจสอบขอบเขตของข้อผิดพลาด เช่น ในการคำนวณช่วงนอกจากนี้ยังใช้ในการใช้งานฟังก์ชันบางอย่างด้วย
  • พื้นฐานทางคณิตศาสตร์ของการดำเนินการ โดยเฉพาะอย่างยิ่งการปัดเศษที่ถูกต้อง ช่วยให้สามารถพิสูจน์คุณสมบัติทางคณิตศาสตร์และออกแบบอัลกอริธึมเลขทศนิยม เช่น2Sum, Fast2Sumและอัลกอริธึมการหาผลรวมของ Kahanเพื่อปรับปรุงความแม่นยำหรือใช้งานซับรูทีนทางคณิตศาสตร์ที่มีความแม่นยำสูงได้ค่อนข้างง่าย

คุณสมบัติของรูปแบบความแม่นยำเดี่ยวและคู่คือการเข้ารหัสทำให้สามารถเรียงลำดับได้ง่ายโดยไม่ต้องใช้ฮาร์ดแวร์จุดลอยตัว ราวกับว่าบิตแทน จำนวนเต็มที่มี เครื่องหมายและขนาดแม้ว่าจะไม่ชัดเจนว่านี่เป็นการพิจารณาในการออกแบบหรือไม่ (ดูเหมือนว่า การแสดง จุดลอยตัวเลขฐานสิบหกของ IBM รุ่นก่อนหน้านี้ ก็มีคุณสมบัตินี้สำหรับตัวเลขปกติเช่นกัน) ด้วยการแสดงแบบสองส่วนเติม เต็มที่แพร่หลาย การตีความบิตเป็นจำนวนเต็มที่มีเครื่องหมายจะเรียงลำดับค่าบวกได้อย่างถูกต้อง แต่ค่าลบจะกลับด้าน วิธีการแก้ไขที่เป็นไปได้วิธีหนึ่งคือการใช้XORเพื่อพลิกบิตเครื่องหมายสำหรับค่าบวกและบิตทั้งหมดสำหรับค่าลบ ทำให้ค่าทั้งหมดสามารถเรียงลำดับได้เป็นจำนวนเต็มที่ไม่มีเครื่องหมาย (โดยที่−0 < +0 ) [ 35 ]

คำแนะนำ

การจัดการข้อยกเว้นทางเลือก

มาตรฐานนี้แนะนำการจัดการข้อยกเว้นแบบเลือกได้ในรูปแบบต่างๆ รวมถึงการแทนที่ค่าเริ่มต้นที่ผู้ใช้กำหนดไว้ล่วงหน้า และกับดัก (ข้อยกเว้นที่เปลี่ยนแปลงการไหลของการควบคุมในบางวิธี) และรูปแบบการจัดการข้อยกเว้นอื่นๆ ที่ขัดจังหวะการไหล เช่น try/catch กับดักและกลไกการจัดการข้อยกเว้นอื่นๆ ยังคงเป็นทางเลือกเช่นเดียวกับใน IEEE 754-1985

มาตรา 9 ในมาตรฐานแนะนำการดำเนินการทางคณิตศาสตร์เพิ่มเติม[ 46 ]ที่มาตรฐานภาษาควรจะกำหนด[ 47 ] ไม่จำเป็นต้องมีการดำเนินการใดๆ เพื่อให้สอดคล้องกับมาตรฐาน

ต่อไปนี้เป็นการดำเนินการทางคณิตศาสตร์ที่แนะนำ ซึ่งต้องปัดเศษอย่างถูกต้อง: [ 48 ]

ฟังก์ชัน, และไม่ได้เป็นส่วนหนึ่งของมาตรฐาน IEEE 754-2008 เนื่องจากถือว่ามีความจำเป็นน้อยกว่า[ 50 ]และมีการกล่าวถึง แต่ถือว่าเป็นข้อผิดพลาด[ 5 ]ทั้งสามฟังก์ชันถูกเพิ่มในการแก้ไขปี 2019

การดำเนินการที่แนะนำยังรวมถึงการตั้งค่าและการเข้าถึงทิศทางการปัดเศษโหมดไดนามิก[ 51 ]และการดำเนินการลดเวกเตอร์ที่กำหนดโดยการใช้งาน เช่น ผลรวม ผลคูณแบบปรับขนาด และผลคูณดอทมาตรฐานยอมรับว่าผลลัพธ์เชิงตัวเลขสำหรับการดำเนินการลดเหล่านี้อาจแตกต่างกันไปในแต่ละการใช้งานเนื่องจากความกว้างของผลลัพธ์ระดับกลางและลำดับของการดำเนินการ[ 52 ]

ณ ปี 2019 การดำเนินการทางคณิตศาสตร์เสริม[ 53 ]สำหรับรูปแบบไบนารีก็ได้รับการแนะนำเช่นกัน การดำเนินการเหล่านี้ ซึ่งระบุไว้สำหรับการบวก การลบ และการคูณ จะสร้างค่าคู่หนึ่งซึ่งประกอบด้วยผลลัพธ์ที่ปัดเศษอย่างถูกต้องไปยังค่าที่ใกล้ที่สุดในรูปแบบ และเทอมข้อผิดพลาด ซึ่งสามารถแสดงได้อย่างแม่นยำในรูปแบบ ณ เวลาที่เผยแพร่มาตรฐาน ยังไม่มีการใช้งานฮาร์ดแวร์ที่เป็นที่รู้จัก แต่การดำเนินการที่คล้ายกันมากได้ถูกนำไปใช้ในซอฟต์แวร์แล้วโดยใช้อัลกอริทึมที่เป็นที่รู้จักกันดี ประวัติและแรงจูงใจในการกำหนดมาตรฐานของการดำเนินการเหล่านี้ได้รับการอธิบายไว้ในเอกสารเบื้องหลัง[ 54 ] [ 55 ]

ณ ปี 2019 ค่า minNum , maxNum , minNumMagและmaxNumMag ที่เคยกำหนดไว้ ใน IEEE 754-2008 ถูกยกเลิกเนื่องจากไม่มีคุณสมบัติการเชื่อมโยง แทนที่จะ ใช้ค่าเหล่า นั้น แนะนำให้ใช้การดำเนินการขั้นต่ำและสูงสุดชุดใหม่สองชุด[ 56 ] ชุดแรกประกอบด้วย minimum , minimumNumber , maximumและmaximumNumberชุดที่สองประกอบด้วยminimumMagnitude , minimumMagnitudeNumber , maximumMagnitudeและmaximumMagnitudeNumberประวัติและแรงจูงใจในการเปลี่ยนแปลงนี้อธิบายไว้ในเอกสารเบื้องหลัง[ 57 ]

การประเมินการแสดงออก

มาตรฐานนี้แนะนำว่ามาตรฐานภาษาควรระบุความหมายของลำดับการดำเนินการอย่างไร และชี้ให้เห็นถึงความละเอียดอ่อนของความหมายตามตัวอักษรและการปรับแต่งที่เปลี่ยนแปลงค่าของผลลัพธ์ ในทางตรงกันข้าม มาตรฐานฉบับ ปี 1985 ก่อนหน้านี้ ไม่ได้ระบุรายละเอียดบางส่วนของอินเทอร์เฟซภาษา ซึ่งนำไปสู่พฤติกรรมที่ไม่สอดคล้องกันระหว่างคอมไพเลอร์ หรือระดับการปรับแต่งที่แตกต่างกันในคอมไพเลอร์ที่ปรับแต่งแล้ว

ภาษาโปรแกรมควรอนุญาตให้ผู้ใช้ระบุความแม่นยำขั้นต่ำสำหรับการคำนวณขั้นกลางของนิพจน์สำหรับแต่ละฐานตัวเลข ในมาตรฐานจะเรียกว่าpreferredWidthและควรสามารถตั้งค่านี้ได้ในแต่ละบล็อก การคำนวณขั้นกลางภายในนิพจน์ควรคำนวณและบันทึกค่าชั่วคราวโดยใช้ค่าสูงสุดระหว่างความกว้างของตัวถูกดำเนินการและ preferred width หากมีการตั้งค่าไว้ ดังนั้น ตัวอย่างเช่น คอมไพเลอร์ที่กำหนด เป้าหมายฮาร์ดแวร์จุดลอยตัว x87ควรมีวิธีการระบุว่าการคำนวณขั้นกลางต้องใช้รูปแบบ double-extendedค่าที่จัดเก็บไว้ของตัวแปรจะต้องถูกนำมาใช้เสมอเมื่อประเมินนิพจน์ถัดไป แทนที่จะใช้ค่าก่อนหน้าก่อนการปัดเศษและการกำหนดค่าให้กับตัวแปร

ความสามารถในการทำซ้ำ

มาตรฐาน IEEE 754-1985 อนุญาตให้มีการใช้งานที่หลากหลาย (เช่น การเข้ารหัสค่าบางค่าและการตรวจจับข้อยกเว้นบางประการ) IEEE 754-2008 ได้ลดข้อกำหนดเหล่านี้ลง แต่ยังคงมีรูปแบบที่หลากหลายอยู่บ้าง (โดยเฉพาะอย่างยิ่งสำหรับรูปแบบไบนารี) ข้อกำหนดเรื่องความสามารถในการทำซ้ำได้แนะนำว่า มาตรฐานภาษาควรจัดหาวิธีการเขียนโปรแกรมที่สามารถทำซ้ำได้ (กล่าวคือ โปรแกรมที่จะให้ผลลัพธ์เดียวกันในทุกการใช้งานของภาษา) และอธิบายถึงสิ่งที่ต้องทำเพื่อให้ได้ผลลัพธ์ที่สามารถทำซ้ำได้

ตัวอย่างที่เป็นรูปธรรมของพฤติกรรมที่อาจไม่สามารถทำซ้ำได้นั้น สามารถพบได้ในภาษา C และC++ซึ่งอนุญาตให้ใช้ความแม่นยำสูงขึ้นสำหรับผลลัพธ์ของการดำเนินการจุดลอยตัวและการย่อส่วนของนิพจน์จุดลอยตัว เช่น การคูณและบวกปกติเป็นFMAและ1.0/sqrt(x)เป็นรากที่สองผกผันเป็นคำสั่งเดียว[ 58 ]คอมไพเลอร์ C/C++ เช่นGCCและcl.exeโดยทั่วไปจะตั้งค่าเริ่มต้นให้ยอมรับทั้งสองอย่าง เว้นแต่จะขอเป็นพิเศษไม่ให้ทำเช่นนั้น เนื่องจากการเปลี่ยนแปลงเหล่านี้สามารถสร้างโค้ดที่เร็วขึ้นโดยไม่สูญเสียความแม่นยำอย่างเห็นได้ชัด คอมไพเลอร์ยังเสนอการเพิ่มประสิทธิภาพ "เร็ว" ที่ไม่เป็นไปตามข้อกำหนดอย่างชัดเจนอีกด้วย[ 59 ] [ 60 ]ฟังก์ชันทางคณิตศาสตร์ของภาษา Cมักไม่ได้ถูกนำไปใช้เพื่อให้ "ปัดเศษอย่างถูกต้อง" และยิ่งทำให้ปัญหานี้รุนแรงขึ้น[ 61 ]สภาพแวดล้อมจุดลอยตัวอาจเปลี่ยนแปลงไปโดยไม่คาดคิดจากโค้ดของบุคคลที่สาม

การแสดงออกของตัวละคร

มาตรฐานกำหนดให้มีการดำเนินการแปลงระหว่างรูปแบบที่รองรับและลำดับอักขระภายนอก [ 62 ] จำเป็นต้องมีการแปลงไปและกลับจากรูปแบบอักขระทศนิยมสำหรับทุกรูปแบบ การแปลงเป็นลำดับอักขระภายนอกจะต้องเป็นไปในลักษณะที่การแปลงแบบไปกลับ จากการแสดงเลขฐานสองภายในเป็นข้อความทศนิยมภายนอกและกลับไปเป็นการแสดงเลขฐานสองภายใน จะกู้คืนตัวเลขเดิมได้เมื่อใช้ roundTiesToEven [ 63 ]ไม่มีข้อกำหนดในการรักษาเพย์โหลดของ NaN เงียบหรือ NaN สัญญาณ และการแปลงจากลำดับอักขระภายนอกอาจเปลี่ยน NaN สัญญาณเป็น NaN เงียบ

ค่าไบนารีดั้งเดิมจะถูกเก็บรักษาไว้โดยการแปลงเป็นเลขฐานสิบและแปลงกลับอีกครั้งโดยใช้: [ 64 ]

  • เลขฐานสอง 16 มี 5 หลักทศนิยม
  • เลขฐานสอง 32 มี 9 หลักทศนิยม
  • เลขฐานสอง 64 มี 17 หลักทศนิยม
  • เลขฐานสอง 128 มี 36 หลักทศนิยม

สำหรับรูปแบบไบนารีอื่นๆ จำนวนหลักทศนิยมที่ต้องการคือ[ i ]

โดยที่pคือจำนวนบิตที่มีนัยสำคัญในรูปแบบไบนารี เช่น 237 บิตสำหรับไบนารี 256

Gay [ 65 ]ได้กล่าวถึงอัลกอริธึมพร้อมโค้ดสำหรับการแปลงเลขฐานสองเป็นเลขฐานสิบและเลขฐานสิบเป็นเลขฐานสองที่ปัดเศษอย่างถูกต้อง และ Paxson และ Kahan [ 66 ] ได้ทำการอธิบาย เกี่ยวกับการทดสอบอัลกอริธึมพร้อมโค้ด [ 65 ]

ด้วยรูปแบบจุดลอยตัวแบบทศนิยม การแปลงเป็นลำดับอักขระทศนิยมจะมีความแม่นยำและรับประกันพฤติกรรมแบบไป-กลับ ตราบใดที่การแสดงข้อความยังคงรักษาควอนตัม[ 67 ]โดยการรักษาเลขศูนย์ต่อท้ายทางด้านขวาของจุดทศนิยมในส่วนสำคัญ การแสดงทศนิยมจะถูกรักษาไว้โดยใช้:

  • เลขฐานสิบ 7 หลักสำหรับ decimal32
  • เลขฐานสิบ 16 หลักสำหรับ decimal64
  • เลขฐานสิบ 128 มี 34 หลักทศนิยม

ค่าคงที่เลขฐานสิบหก

สำหรับรูปแบบไบนารี มาตรฐานแนะนำให้จัดเตรียมการแปลงไปและกลับจากลำดับอักขระเลขฐานสิบหกภายนอกโดยอิงตามตัวอักษรเลขทศลอยฐานสิบหกของC99+ ตัวอักษรดังกล่าวประกอบด้วยเครื่องหมายเสริม ( หรือ-) ตัวบ่งชี้ "0x" เลขฐานสิบหกที่มีหรือไม่มีจุด ตัวบ่งชี้เลขชี้กำลัง "p" และเลขชี้กำลังทศนิยมที่มีเครื่องหมายเสริม ไวยากรณ์ไม่คำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก[ 68 ]เลขชี้กำลังทศนิยมจะปรับขนาดตามกำลังของ 2 ตัวอย่างเช่น0x0.1p0คือ 1/16 และ0x0.1p-4คือ 1/256 [ 69 ]

มาตรฐานไม่ได้กล่าวถึงค่าเลขฐานสิบหกสำหรับรูปแบบเลขฐานสิบ เนื่องจากลำดับอักขระเลขฐานสิบสามารถแสดงค่าทศลอยทั้งหมดได้อย่างแม่นยำ

ดูเพิ่มเติม

  • รูปแบบจุดลอยตัว bfloat16
  • บินาเด
  • โคโปรเซสเซอร์
  • C99สำหรับตัวอย่างโค้ดที่แสดงวิธีการเข้าถึงและใช้งานคุณสมบัติของ IEEE 754
  • การคำนวณเลขทศนิยม : ประวัติความเป็นมา หลักการออกแบบ และตัวอย่างการใช้งานคุณสมบัติของมาตรฐาน IEEE 754
  • เลขคณิตจุดคงที่เป็นอีกแนวทางหนึ่งในการคำนวณจำนวนตรรกยะ (โดยเฉพาะอย่างยิ่งมีประโยชน์เมื่อทราบช่วงของเลขชี้กำลัง คงที่ หรือถูกจำกัดไว้ในระหว่างการคอมไพล์)
  • IBM System z9เป็นซีพียูตัวแรกที่ใช้การคำนวณเลขฐานสิบตามมาตรฐาน IEEE 754-2008 (โดยใช้ไมโครโค้ดฮาร์ดแวร์)
  • IBM z10 , IBM z196 , IBM zEC12และIBM z13เป็นซีพียูที่ใช้การคำนวณเลขฐานสิบตามมาตรฐาน IEEE 754-2008 ในระดับฮาร์ดแวร์อย่างสมบูรณ์
  • ISO/IEC 10967 , การคำนวณเลขคณิตที่ไม่ขึ้นกับภาษา (LIA)
  • มินิฟลัต (Minifloat)คือรูปแบบเลขทศลอยไบนารีความแม่นยำต่ำที่ปฏิบัติตามหลักการของ IEEE 754
  • ซีพียู POWER6 , POWER7และPOWER8ที่ใช้การคำนวณเลขฐานสิบตามมาตรฐาน IEEE 754-2008 ในระดับฮาร์ดแวร์อย่างสมบูรณ์
  • strictfpเป็นคีย์เวิร์ดที่ล้าสมัยในภาษาการเขียนโปรแกรม Javaซึ่งก่อนหน้านี้จำกัดการคำนวณทางคณิตศาสตร์ไว้ที่ความแม่นยำเดี่ยวและคู่ตามมาตรฐาน IEEE 754 เพื่อให้มั่นใจได้ถึงความสามารถในการทำซ้ำได้บนแพลตฟอร์มฮาร์ดแวร์ทั่วไป (ตั้งแต่ Java 17 เป็นต้นไป พฤติกรรมนี้เป็นสิ่งที่จำเป็น)
  • ปัญหาของผู้สร้างตารางสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการปัดเศษฟังก์ชันที่ถูกต้อง
  • สภาพแวดล้อมตัวเลขมาตรฐานของ Apple
  • จุดลอยตัวแบบเรียว
  • Positรูปแบบตัวเลขทางเลือก

หมายเหตุ

  1. ^ตัวอย่างเช่น ถ้าฐานคือ 10 เครื่องหมายคือ 1 (แสดงว่าเป็นลบ) ตัวเลขสำคัญคือ 12345 และเลขชี้กำลังคือ −3 ค่าของจำนวนนั้นคือ (−1) 1 × 12345 × 10 −3 = −1 × 12345 × 0.001 = −12.345
  2. ^ค่าโดยประมาณ สำหรับค่าที่แน่นอน โปรดดูรายละเอียดในแต่ละรูปแบบได้จากบทความวิกิพีเดียของแต่ละรูปแบบ
  3. ^จำนวนหลักในฐานที่ใช้ รวมทั้งหลักที่ไม่ระบุ แต่ไม่นับบิตเครื่องหมาย
  4. ^จำนวนหลักทศนิยมที่สอดคล้องกัน โปรดดูรายละเอียดเพิ่มเติมในเนื้อหา
  5. ^ตรงกันข้ามกับเลขฐานสิบ ไม่มีรูปแบบการแลกเปลี่ยนข้อมูลแบบไบนารีที่มีความยาว 96 บิต อย่างไรก็ตาม รูปแบบดังกล่าวก็ยังคงอนุญาตให้ใช้ได้ในฐานะรูปแบบที่ไม่ใช่การแลกเปลี่ยนข้อมูล
  6. ^มาตรฐานแนะนำให้ใช้ 0 สำหรับ NaN ที่เป็นสัญญาณ และ 1 สำหรับ NaN ที่เป็นสัญญาณเงียบ เพื่อให้ NaN ที่เป็นสัญญาณเงียบลงได้โดยการเปลี่ยนบิตนี้เป็น 1 เท่านั้น ในขณะที่การทำในทางกลับกันอาจทำให้ได้การเข้ารหัสเป็นค่าอนันต์
  7. ^ในบางกรณีที่เกิดภาวะอันเดอร์โฟลว์ จะไม่มีการแจ้งเตือนใดๆ
  8. ^ดูการหาค่าผกผันของรากที่สองอย่างรวดเร็วและวิธีการคำนวณรากที่สอง#วิธีการวนซ้ำสำหรับรากที่สองผกผัน
  9. ^ตามข้อจำกัดในการใช้งาน การปัดเศษที่ถูกต้องจะรับประกันได้เฉพาะจำนวนหลักทศนิยมที่ต้องการบวก 3 สำหรับรูปแบบไบนารีที่ใหญ่ที่สุดที่รองรับเท่านั้น ตัวอย่างเช่น หาก binary32 เป็นรูปแบบไบนารีที่ใหญ่ที่สุดที่รองรับ การแปลงจากลำดับทศนิยมภายนอกที่มี 12 หลักจะรับประกันได้ว่าปัดเศษอย่างถูกต้องเมื่อแปลงเป็น binary32 แต่การแปลงลำดับที่มี 13 หลักจะไม่เป็นเช่นนั้น อย่างไรก็ตาม มาตรฐานแนะนำว่าการใช้งานไม่ควรบังคับใช้ข้อจำกัดดังกล่าว

อ่านเพิ่มเติม

  • Goldberg, David (มีนาคม 1991). "สิ่งที่นักวิทยาศาสตร์คอมพิวเตอร์ทุกคนควรรู้เกี่ยวกับเลขคณิตจุดลอยตัว" . ACM Computing Surveys . 23 (1): 5– 48. doi : 10.1145/103162.103163 .(พร้อมส่วนเพิ่มเติม "ความแตกต่างระหว่างการใช้งาน IEEE 754": [1] , [2] )
  • เฮกเกอร์, คริส (กุมภาพันธ์ 1996). "Let's Get To The (Floating) Point" (PDF) . นักพัฒนาเกม : 19– 24.
  • Severance, Charles (มีนาคม 1998). "IEEE 754: บทสัมภาษณ์กับ William Kahan" (PDF) . IEEE Computer . 31 (3): 114– 115. doi : 10.1109/MC.1998.660194 . สืบค้นเมื่อ2019-03-08 .
  • Cowlishaw, Mike (มิถุนายน 2003). "เลขทศลอยแบบจุดลอยตัว: อัลกอริทึมสำหรับคอมพิวเตอร์" (PDF) . การประชุมวิชาการด้านเลขคณิตคอมพิวเตอร์ IEEE ครั้งที่ 16 ปี 2003. เอกสารประกอบการประชุม . ลอส อลามิโตส รัฐแคลิฟอร์เนีย: สมาคมคอมพิวเตอร์ IEEE. หน้า  104–111 . doi : 10.1109/ARITH.2003.1207666 . ISBN 978-0-7695-1894-7สืบค้นเมื่อ14 พฤศจิกายน 2014.
  • Monniaux, David (พฤษภาคม 2008). "ข้อผิดพลาดในการตรวจสอบการคำนวณจุดลอยตัว" . ACM Transactions on Programming Languages ​​and Systems . 30 (3): 1– 41. arXiv : cs/0701192 . doi : 10.1145/1353445.1353446 .: บทสรุปพฤติกรรมที่ไม่เป็นไปตามสัญชาตญาณของเลขทศนิยมบนสถาปัตยกรรมที่นิยมใช้ พร้อมนัยสำคัญต่อการตรวจสอบและทดสอบโปรแกรม
  • มุลเลอร์, ฌอง-มิเชล; บรูนี, นิโคลัส; เดอ ดิเนชิน, ฟลอร็องต์; เจนเนร็อด, โคล้ด-ปิแอร์; จอลเดส, มิโออารา; เลอแฟฟร์, วินเซนต์; เมลกิออนด์, กิโยม; รีวอล, นาตาลี ; ตอร์เรส,เซิร์จ (2018) [2010]. คู่มือเลขคณิตทศนิยม (ฉบับที่ 2) บีร์ฮอสเซอร์ . ดอย : 10.1007/978-3-319-76526-6 . ไอเอสบีเอ็น 978-3-319-76525-9.
  • โอเวอร์ตัน, ไมเคิล แอล. (2001). เขียนที่สถาบันคูแรนต์แห่งวิทยาศาสตร์คณิตศาสตร์มหาวิทยาลัยนิวยอร์กนิวยอร์ก สหรัฐอเมริกาการคำนวณเชิงตัวเลขด้วยเลขคณิตจุดลอยตัวของ IEEE (ฉบับที่ 1). ฟิลาเดลเฟีย สหรัฐอเมริกา: SIAM . doi : 10.1137/1.9780898718072 . ISBN 978-0-89871-482-1978-0-89871-571-2, 0-89871-571-7ฉบับพิมพ์ครั้งที่ 2, 2025. SIAM. ISBN 978-1-61197-840-7.
  • เคลฟ โมเลอร์ กับตัวเลขจุดลอยตัว
  • Beebe, Nelson HF (2017-08-22). คู่มือการคำนวณฟังก์ชันทางคณิตศาสตร์ - การเขียนโปรแกรมโดยใช้ไลบรารีซอฟต์แวร์พกพา MathCW (ฉบับที่ 1). ซอลต์เลคซิตี้, ยูทาห์, สหรัฐอเมริกา: Springer International Publishing AG . doi : 10.1007/978-3-319-64110-2 . ISBN 978-3-319-64109-6.
  • Hough, David G. (ธันวาคม 2019). "มาตรฐาน IEEE 754: หนึ่งเดียวสำหรับบันทึกประวัติศาสตร์"คอมพิวเตอร์52 ( 12). IEEE : 109– 112. doi : 10.1109 /MC.2019.2926614 .
  • มาตรฐาน ANSI/IEEE Std 754-2019
  • คาฮาน กับการสร้าง มาตรฐานเลขทศนิยมแบบมาตรฐาน IEEEคลิปผู้ได้รับรางวัลทัวริง 16 พฤศจิกายน 2020เก็บถาวรจากต้นฉบับเมื่อ 8 พฤศจิกายน 2021
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=IEEE_754&oldid=1359997715 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ อีไออี 754

มาตรฐานIEEE สำหรับการคำนวณเลขทศนิยม ( IEEE 754 ) เป็นมาตรฐานทางเทคนิค สำหรับการคำนวณเลขทศนิยมซึ่งกำหนดขึ้นครั้งแรกในปี 1985 โดยสถาบันวิศวกรรมไฟฟ้าและอิเล็กทรอนิกส์ (IEEE)

ประวัติศาสตร์

ความจำเป็นในการกำหนดมาตรฐานเลขทศนิยมเกิดขึ้นจากความสับสนวุ่นวายในอุตสาหกรรมการคำนวณทางธุรกิจและวิทยาศาสตร์ในช่วงทศวรรษ 1960 และ 1970 IBM ใช้ รูปแบบเลขทศนิยมฐานสิบหก โดยใช้เจ็ดบิตสำหรับเลขชี้กำลังเสมอโดยไม่คำนึงถึงความแม่นยำ คอมพิวเตอร์ CDC และ Cray ใช้...

รูปแบบ

IEEE 754 กำหนด รูปแบบ เป็น "ชุดของการแสดงค่าตัวเลขและสัญลักษณ์ อาจมีการเข้ารหัสประกอบด้วย" [ 9 ]

การแสดงผลและการเข้ารหัสในหน่วยความจำ

ตัวเลขบางตัวอาจมีรูปแบบการแสดงผลแบบจุดลอยตัวได้หลายแบบ ตัวอย่างเช่น ถ้า b = 10 และ p = 7 แล้ว −12.