อ่าน 6 นาที
จุดลอยตัวทศนิยม
เลขคณิต ทศนิยมลอยตัว ( DFP ) หมายถึงทั้งการแสดงผลและการดำเนินการกับ เลข ทศนิยมลอยตัวการทำงานโดยตรงกับเศษส่วนทศนิยม (ฐาน 10)...
จุดลอยตัวทศนิยม
| รูปแบบจุดลอยตัว |
|---|
| อีไออี 754 |
|
| อื่น |
| ทางเลือกอื่นๆ |
| จุดลอยตัวแบบเรียว |
| ความกว้างบิตของสถาปัตยกรรมคอมพิวเตอร์ |
|---|
| นิดหน่อย |
| แอปพลิเคชัน |
| ความแม่นยำของเลขทศลอยไบนารี |
| ความแม่นยำของเลขทศนิยมแบบจุดลอยตัว |
เลขคณิต ทศนิยมลอยตัว ( DFP ) หมายถึงทั้งการแสดงผลและการดำเนินการกับ เลข ทศนิยมลอยตัวการทำงานโดยตรงกับเศษส่วนทศนิยม (ฐาน 10) สามารถหลีกเลี่ยงข้อผิดพลาดจากการปัดเศษที่มักเกิดขึ้นเมื่อแปลงระหว่างเศษส่วนทศนิยม (ซึ่งพบได้ทั่วไปในข้อมูลที่มนุษย์ป้อน เช่น การวัดหรือข้อมูลทางการเงิน) และเศษส่วนไบนารี (ฐาน 2)
ข้อดีของการแสดงค่าแบบทศนิยมลอยตัว (floating-point) เมื่อเทียบกับการแสดงค่าแบบทศนิยมคงที่ (fixed-point)และจำนวนเต็ม (integer)คือรองรับช่วงค่าที่กว้างกว่ามาก ตัวอย่างเช่น ในขณะที่การแสดงค่าแบบทศนิยมคงที่ที่จัดสรรตัวเลขทศนิยม 8 หลักและ 2 ตำแหน่ง สามารถแสดงตัวเลข 123456.78, 8765.43, 123.00 และอื่นๆ ได้ แต่การแสดงค่าแบบทศนิยมลอยตัวที่มีตัวเลขทศนิยม 8 หลัก ยังสามารถแสดงค่า 1.2345678, 1234567.8, 0.000012345678, 12345678000000000 และอื่นๆ ได้อีกด้วย ช่วงค่าที่กว้างขึ้นนี้สามารถลดการสะสมของข้อผิดพลาดจากการปัดเศษระหว่างการคำนวณต่อเนื่องได้อย่างมาก ตัวอย่างเช่นอัลกอริทึมการหาผลรวมของ Kahanสามารถใช้ในทศนิยมลอยตัวเพื่อบวกตัวเลขจำนวนมากโดยไม่มีการสะสมของข้อผิดพลาดจากการปัดเศษแบบไม่จำกัด
การนำไปใช้
การใช้งานเลขทศนิยมแบบลอยตัวในเชิงกลไกในยุคแรกๆ นั้นเห็นได้ชัดในลูกคิดไม้บรรทัดคำนวณเครื่องคิดเลข Smallwoodและเครื่องคิดเลข อื่นๆ บางรุ่น ที่รองรับการป้อนค่าในรูปแบบสัญกรณ์วิทยาศาสตร์ในกรณีของเครื่องคิดเลขเชิงกลไก เลขชี้กำลังมักถูกมองว่าเป็นข้อมูลเพิ่มเติมที่คำนวณแยกต่างหาก
คอมพิวเตอร์IBM 650รองรับรูปแบบจุดลอยตัวทศนิยม 8 หลักในปี พ.ศ. 2496 [ 1 ] [ 2 ] เครื่อง Wang VSซึ่งเป็นระบบไบนารีรองรับรูปแบบจุดลอยตัวทศนิยม 64 บิตในปี พ.ศ. 2520 [ 3 ] Motorola 68881รองรับรูปแบบที่มีแมนทิสซา 17 หลักและเลขชี้กำลัง 3 หลักในปี พ.ศ. 2527 โดยไลบรารีสนับสนุนจุดลอยตัวสำหรับ โปรเซสเซอร์ Motorola 68040ให้รูปแบบการจัดเก็บจุดลอยตัวทศนิยม 96 บิตที่เข้ากันได้ในปี พ.ศ. 2533 [ 3 ]
ภาษาคอมพิวเตอร์บาง ภาษา มีการใช้งานการคำนวณเลขทศลอยแบบจุดลอยตัว รวมถึงPL/I , .NET , [ 4 ] emacsที่มี calc และโมดูล decimal ของPython [ 5 ] ในปี 1987 IEEEได้ออกIEEE 854ซึ่งเป็นมาตรฐานสำหรับการคำนวณด้วยเลขทศลอยแบบจุดลอยตัว แต่ขาดข้อกำหนดเกี่ยวกับวิธีการเข้ารหัสข้อมูลเลขทศลอยแบบจุดลอยตัวเพื่อแลกเปลี่ยนกับระบบอื่น ต่อมาได้มีการแก้ไขปัญหานี้ในIEEE 754-2008ซึ่งได้กำหนดมาตรฐานการเข้ารหัสข้อมูลเลขทศลอยแบบจุดลอยตัวแบบจุดลอยตัวแบบจุดลอยตัว แม้ว่าจะมีวิธีการทางเลือกสองวิธีที่แตกต่างกันก็ตาม
โปรเซสเซอร์ IBM POWER6และ POWER รุ่นใหม่กว่ามี DFP ในฮาร์ดแวร์ เช่นเดียวกับIBM System z9 [ 6 ] (และเครื่อง zSeries รุ่นหลังๆ) SilMinds นำเสนอ SilAx ซึ่งเป็นโคโปรเซสเซอร์ เวกเตอร์ DFP ที่กำหนดค่าได้ [ 7 ] IEEE 754-2008กำหนดรายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้Fujitsu ยังมีโปรเซสเซอร์ SPARC 64 บิตที่มี DFP ในฮาร์ดแวร์ อีกด้วย [ 8 ] [ 3 ]
การเข้ารหัส IEEE 754-2008
มาตรฐานIEEE 754-2008กำหนดรูปแบบการแสดงค่าทศนิยมแบบ 32 บิต 64 บิต และ 128 บิต เช่นเดียวกับรูปแบบค่าทศนิยมแบบไบนารี ตัวเลขจะถูกแบ่งออกเป็นเครื่องหมาย เลขชี้กำลัง และส่วนสำคัญแต่แตกต่างจากค่าทศนิยมแบบไบนารีตรงที่ตัวเลขไม่จำเป็นต้องถูกทำให้เป็นมาตรฐานเสมอไป ค่าที่มีจำนวนหลักสำคัญ น้อย จะมีรูปแบบการแสดงได้หลายแบบ เช่น 1×10² = 0.1×10³ = 0.01× 10⁴เป็นต้น เมื่อส่วนสำคัญเป็นศูนย์ เลขชี้กำลังสามารถเป็นค่าใดก็ได้
| ทศนิยม32 | ทศนิยม64 | ทศนิยม128 | ทศนิยม(32 k ) | รูปแบบ |
|---|---|---|---|---|
| 1 | 1 | 1 | 1 | ช่องสัญญาณ (บิต) |
| 5 | 5 | 5 | 5 | ฟิลด์ผสม (บิต) |
| 6 | 8 | 12 | w = 2× k + 4 | ฟิลด์ต่อเลขชี้กำลัง (บิต) |
| 20 | 50 | 110 | t = 30× k −10 | ฟิลด์ต่อค่าสัมประสิทธิ์ (บิต) |
| 32 | 64 | 128 | 32× k | ขนาดทั้งหมด (บิต) |
| 7 | 16 | 34 | p = 3× t /10+1 = 9× k −2 | ขนาดสัมประสิทธิ์ (จำนวนหลักทศนิยม) |
| 192 | 768 | 12288 | 3×2 w = 48×4 k | ช่วงเลขชี้กำลัง |
| 96 | 384 | 6144 | Emax = 3×2 w −1 | ค่าสูงสุดคือ 9.99...×10 Emax |
| −95 | −383 | −6143 | Emin = 1−Emax | ค่าปกติที่เล็กที่สุดคือ 1.00...×10 Emin |
| −101 | −398 | −6176 | Etiny = 2−p−Emax | ค่าที่ไม่เป็นศูนย์ที่เล็กที่สุดคือ 1×10 Etiny |
ช่วงค่าเลขชี้กำลังถูกเลือกเพื่อให้ช่วงค่าที่ใช้ได้สำหรับค่าปกติมีความสมมาตรโดยประมาณ เนื่องจากไม่สามารถทำได้อย่างแม่นยำด้วยจำนวนเลขชี้กำลังที่เป็นไปได้ที่เป็นเลขคู่ จึงได้กำหนดค่าพิเศษให้กับ Emax
มีการกำหนดรูปแบบการแสดงผลที่แตกต่างกันสองแบบ:
- แบบที่มีฟิลด์ตัวเลขสำคัญเป็นจำนวนเต็มไบนารีจะเข้ารหัสตัวเลขสำคัญเป็นจำนวนเต็มไบนารีขนาดใหญ่ระหว่าง 0 ถึง 10 p −1 ซึ่งคาดว่าจะสะดวกกว่าสำหรับการใช้งานซอฟต์แวร์ที่ใช้ALU แบบ ไบนารี
- อีกวิธีหนึ่งที่มีฟิลด์ตัวเลขสำคัญทศนิยมที่อัดแน่นจะเข้ารหัสตัวเลขทศนิยมโดยตรงมากขึ้น ทำให้การแปลงไปมาระหว่างรูปแบบเลขฐานสองแบบลอยตัวเร็วขึ้น แต่ต้องใช้ฮาร์ดแวร์เฉพาะทางเพื่อจัดการอย่างมีประสิทธิภาพ คาดว่าวิธีนี้จะสะดวกกว่าสำหรับการใช้งานในฮาร์ดแวร์
ทั้งสองทางเลือกให้ช่วงค่าที่สามารถแสดงได้เหมือนกันทุกประการ
บิตสองบิตที่สำคัญที่สุดของเลขชี้กำลังถูกจำกัดอยู่ในช่วง 0–2 และบิตสี่บิตที่สำคัญที่สุดของตัวเลขสำคัญถูกจำกัดอยู่ในช่วง 0–9 ชุดค่าผสมที่เป็นไปได้ 30 ชุดถูกเข้ารหัสในฟิลด์ 5 บิต พร้อมด้วยรูปแบบพิเศษสำหรับค่าอนันต์และ NaN
หากบิตสำคัญที่สุด 4 บิตของค่าที่ต้องการวิเคราะห์อยู่ระหว่าง 0 ถึง 7 ค่าที่เข้ารหัสจะเริ่มต้นดังนี้:
s 00mmm xxx เลขชี้กำลังขึ้นต้นด้วย 00 ส่วนสำคัญขึ้นต้นด้วย 0mmm s 01mmm xxx เลขชี้กำลังขึ้นต้นด้วย 01 ส่วนสำคัญขึ้นต้นด้วย 0mmm s 10mmm xxx เลขชี้กำลังขึ้นต้นด้วย 10 ตัวเลขสำคัญขึ้นต้นด้วย 0mmm
ถ้า 4 บิตแรกของตัวเลขสำคัญเป็นเลขฐานสอง 1000 หรือ 1001 (เลขฐานสิบ 8 หรือ 9) ตัวเลขจะเริ่มต้นดังนี้:
s 1100m xxx เลขชี้กำลังขึ้นต้นด้วย 00 ตัวเลขสำคัญขึ้นต้นด้วย 100m s 1101m xxx เลขชี้กำลังขึ้นต้นด้วย 01 ตัวเลขสำคัญขึ้นต้นด้วย 100m s 1110m xxx เลขชี้กำลังขึ้นต้นด้วย 10 ตัวเลขสำคัญขึ้นต้นด้วย 100m
บิตนำหน้า (s ในตัวอย่างข้างต้น) คือบิตเครื่องหมาย และบิตถัดไป (xxx ในตัวอย่างข้างต้น) จะเข้ารหัสบิตเลขชี้กำลังเพิ่มเติมและเศษเหลือของหลักที่มีค่ามากที่สุด แต่รายละเอียดจะแตกต่างกันไปขึ้นอยู่กับวิธีการเข้ารหัสที่ใช้
ชุดค่าผสมสุดท้ายจะใช้สำหรับค่าอนันต์และค่า NaN และจะเหมือนกันสำหรับการเข้ารหัสทางเลือกทั้งสองแบบ:
s 11110 x ±อนันต์ (ดูเส้นจำนวนจริงแบบขยาย ) s 11111 0 quiet NaN (ไม่สนใจบิตเครื่องหมาย) s 11111 1 ส่งสัญญาณ NaN (บิตเครื่องหมายถูกละเว้น)
ในกรณีหลังนี้ บิตอื่นๆ ทั้งหมดของการเข้ารหัสจะถูกละเลย ดังนั้นจึงสามารถกำหนดค่าเริ่มต้นให้กับอาร์เรย์เป็น NaN ได้โดยการเติมค่าไบต์เดียวลงไป
ฟิลด์ตัวเลขจำนวนเต็มไบนารีที่มีนัยสำคัญ
รูปแบบนี้ใช้ตัวเลขสำคัญแบบไบนารีตั้งแต่ 0 ถึง 10 p −1 ตัวอย่างเช่น ตัวเลขสำคัญของ Decimal32 สามารถมีค่าได้ถึง 10 7 −1 = 9 999 999 = 98967F 16 = 1001 1000100101 1001111111 2ในขณะที่การเข้ารหัสสามารถแสดงตัวเลขสำคัญที่มีค่ามากกว่านี้ได้ แต่ค่าเหล่านั้นไม่ถูกต้อง และมาตรฐานกำหนดให้การใช้งานต้องถือว่าค่าเหล่านั้นเป็น 0 หากพบเจอในข้อมูลป้อนเข้า
ตามที่อธิบายไว้ข้างต้น การเข้ารหัสจะแตกต่างกันไปขึ้นอยู่กับว่าบิต 4 บิตที่สำคัญที่สุดของค่าสำคัญอยู่ในช่วง 0 ถึง 7 (0000 2ถึง 0111 2 ) หรือสูงกว่า (1000 2หรือ 1001 2 )
ถ้า 2 บิตถัดจากบิตเครื่องหมายเป็น "00", "01" หรือ "10" ฟิลด์เลขชี้กำลังจะประกอบด้วย 8 บิตถัดจากบิตเครื่องหมาย (2 บิตที่กล่าวถึงบวกกับ 6 บิตของ "ฟิลด์ส่วนต่อขยายเลขชี้กำลัง") และตัวเลขสำคัญคือ 23 บิตที่เหลือ โดยมีบิต 0 นำหน้าโดยปริยาย ซึ่งแสดงไว้ในวงเล็บ:
s 00eeeeee (0)ttt tttttttttt tttttttttt s 01eeeeee (0)ttt tttttttttt tttttttttt s 10eeeeee (0)ttt tttttttttt tttttttttt
ซึ่งรวมถึงจำนวนที่ต่ำกว่าปกติโดยที่หลักสำคัญนำหน้าเป็น 0
ถ้า 2 บิตถัดจากบิตเครื่องหมายเป็น "11" ฟิลด์เลขชี้กำลัง 8 บิตจะถูกเลื่อนไปทางขวา 2 บิต (หลังจากทั้งบิตเครื่องหมายและบิต "11" ที่อยู่ถัดไป) และตัวเลขสำคัญที่แสดงจะอยู่ใน 21 บิตที่เหลือ ในกรณีนี้จะมีลำดับ 3 บิตนำหน้าโดยปริยาย (กล่าวคือ ไม่ได้ถูกจัดเก็บ) คือ "100" ในตัวเลขสำคัญที่แท้จริง:
s 1100eeeeee (100)t tttttttttt tttttttttt s 1101eeeeee (100)t tttttttttt tttttttttt s 1110eeeeee (100)t tttttttttt tttttttttt
ลำดับ 2 บิต "11" ที่อยู่หลังบิตเครื่องหมายบ่งชี้ว่ามีคำนำหน้า 3 บิต "100" โดย ปริยาย สำหรับส่วนสำคัญ
โปรดทราบว่าบิตนำหน้าของฟิลด์ตัวเลขสำคัญไม่ได้เข้ารหัสตัวเลขทศนิยมที่สำคัญที่สุด แต่เป็นเพียงส่วนหนึ่งของเลขฐานสองบริสุทธิ์ที่ใหญ่กว่า ตัวอย่างเช่น ตัวเลขสำคัญ8,000,000 จะถูกเข้ารหัสเป็นเลขฐานสอง 011110100001001000000000โดย 4 บิตนำหน้าเข้ารหัส 7 ตัวเลขสำคัญตัวแรกที่ต้องการบิตที่ 24 (และดังนั้นจึงเป็นรูปแบบการเข้ารหัสแบบที่สอง ) คือ 2²³ = 8,388,608
ในกรณีข้างต้น ค่าที่แสดงคือ:
- (−1) เครื่องหมาย × 10 เลขชี้กำลัง−101 × ตัวเลขสำคัญ
Decimal64 และ Decimal128 ทำงานในลักษณะเดียวกัน แต่มีฟิลด์การต่อเลขชี้กำลังและฟิลด์ตัวเลขสำคัญที่ใหญ่กว่า สำหรับ Decimal128 รูปแบบการเข้ารหัสแบบที่สองนั้นแทบจะไม่เคยถูกใช้งานเลย ตัวเลขสำคัญที่ถูกต้องที่ใหญ่ที่สุดของ 10 34 −1 = 1ED09BEAD87C0378D8E63FFFFFFFF 16สามารถแสดงได้ใน 113 บิต
ฟิลด์ตัวเลขสำคัญทศนิยมที่อัดแน่น
ในเวอร์ชันนี้ ข้อมูลสำคัญจะถูกจัดเก็บในรูปของชุดตัวเลขทศนิยม โดยตัวเลขหลักแรกอยู่ระหว่าง 0 ถึง 9 (3 หรือ 4 บิตไบนารี) และส่วนที่เหลือของข้อมูลสำคัญจะใช้ การเข้ารหัส แบบ Densely Packed Decimal (DPD)
บิต 2 บิตแรกของเลขชี้กำลังและหลักแรก (3 หรือ 4 บิต) ของตัวเลขสำคัญจะถูกรวมเข้าด้วยกันเป็น 5 บิตที่ตามหลังบิตเครื่องหมาย จากนั้นจึงตามด้วยฟิลด์ต่อเลขชี้กำลังที่มีค่าออฟเซ็ตคงที่
สุดท้าย ฟิลด์ต่อเนื่องของตัวเลขสำคัญประกอบด้วยเดคเล็ต 10 บิต 2, 5 หรือ 11 ตัว โดยแต่ละตัวเข้ารหัสตัวเลขทศนิยม 3 หลัก[ 9 ]
ถ้าบิตสองบิตแรกหลังจากบิตเครื่องหมายเป็น "00", "01" หรือ "10" บิตเหล่านั้นจะเป็นบิตนำของเลขชี้กำลัง และบิตสามบิตถัดไปจะถูกตีความว่าเป็นตัวเลขหลักทศนิยมนำ (0 ถึง 7): [ 10 ]
เลขชี้กำลังบวก ตัวเลขสำคัญ s 00 TTT (00)eeeeee (0TTT)[tttttttttt][tttttttttt] s 01 TTT (01)eeeeee (0TTT)[tttttttttt][tttttttttt] s 10 TTT (10)eeeeee (0TTT)[tttttttttt][tttttttttt]
ถ้าบิตสองบิตแรกหลังบิตเครื่องหมายเป็น "11" บิตสองบิตถัดไปจะเป็นบิตนำหน้าของเลขชี้กำลัง และบิตสุดท้ายจะนำหน้าด้วย "100" เพื่อสร้างตัวเลขหลักทศนิยมนำหน้า (8 หรือ 9):
เลขชี้กำลังบวก ตัวเลขสำคัญ s 1100 T (00)eeeeee (100T)[tttttttttt][tttttttttt] s 1101 T (01)eeeeee (100T)[tttttttttt][tttttttttt] s 1110 T (10)eeeeee (100T)[tttttttttt][tttttttttt]
ค่าผสมที่เหลืออีกสองค่า (11110 และ 11111) ของฟิลด์ 5 บิต จะใช้แทนค่า ±อนันต์ และ NaN ตามลำดับ
การดำเนินการทางคณิตศาสตร์แบบจุดลอยตัว
กฎทั่วไปสำหรับการคำนวณเลขทศนิยมคือจะคำนวณค่าทางคณิตศาสตร์ที่แน่นอน[ 11 ]จากนั้นจึงปัดเศษผลลัพธ์ให้เป็นค่าที่สามารถแสดงได้ใกล้เคียงที่สุดตามความแม่นยำที่กำหนด อันที่จริงนี่คือพฤติกรรมที่กำหนดไว้สำหรับฮาร์ดแวร์คอมพิวเตอร์ที่สอดคล้องกับมาตรฐาน IEEE ภายใต้พฤติกรรมการปัดเศษปกติและในกรณีที่ไม่มีเงื่อนไขพิเศษ
เพื่อให้ง่ายต่อการนำเสนอและทำความเข้าใจ ในตัวอย่างจะใช้ความแม่นยำ 7 หลัก หลักการพื้นฐานนั้นเหมือนกันไม่ว่าจะเป็นความแม่นยำระดับใดก็ตาม
ส่วนที่เพิ่มเข้าไป
วิธีง่ายๆ ในการบวกเลขทศนิยมคือการใช้เลขชี้กำลังเดียวกันในการแสดงเลขเหล่านั้นก่อน ในตัวอย่างด้านล่าง เลขตัวที่สองเลื่อนไปทางขวา 3 หลัก จากนั้นจึงดำเนินการบวกตามปกติ:
ตัวอย่างต่อไปนี้เป็นเลขฐานสิบ ซึ่งหมายความว่าฐานคือ 10
123456.7 = 1.234567 × 10⁵ 101.7654 = 1.017654 × 10² = 0.001017654 × 10⁵
เพราะฉะนั้น:
123456.7 + 101.7654 = (1.234567 × 10 5 ) + (1.017654 × 10 2 ) = (1.234567 × 10 5 ) + (0.001017654 × 10 5 ) = 10 5 × (1.234567 + 0.001017654) = 10 5 × 1.235584654
นี่ไม่ใช่สิ่งอื่นใดนอกจากเป็นการแปลงเป็นสัญกรณ์วิทยาศาสตร์โดยละเอียด:
e=5; s=1.234567 (123456.7) + e=2; s=1.017654 (101.7654)
e=5; s=1.234567 + e=5; s=0.001017654 (หลังการเลื่อน) -------------------- e=5; s=1.235584654 (ผลรวมที่แท้จริง: 123558.4654)
นี่คือผลลัพธ์ที่แท้จริง ผลรวมที่แน่นอนของตัวดำเนินการ ผลลัพธ์จะถูกปัดเศษให้เหลือ 7 หลัก แล้วปรับให้เป็นค่ามาตรฐานหากจำเป็น ผลลัพธ์สุดท้ายคือ:
อี=5; s=1.235585 (ผลรวมสุดท้าย: 123558.5)
โปรดสังเกตว่าตัวเลข 3 หลักล่างของตัวดำเนินการตัวที่สอง (654) นั้นหายไปโดยพื้นฐานแล้ว นี่คือข้อผิดพลาดจากการปัดเศษในกรณีสุดขั้ว ผลรวมของตัวเลขที่ไม่เป็นศูนย์สองตัวอาจเท่ากับตัวเลขใดตัวหนึ่งก็ได้:
e=5; s=1.234567 + e=−3; s=9.876543
e=5; s=1.234567 + e=5; s=0.00000009876543 (หลังการเลื่อน) ---------------------- e=5; s=1.23456709876543 (ผลรวมที่แท้จริง) e=5; s=1.234567 (หลังการปัดเศษ/ปรับค่ามาตรฐาน)
ปัญหาการสูญเสียนัยสำคัญอีกประการหนึ่งเกิดขึ้นเมื่อนำค่าประมาณของจำนวนสองจำนวนที่เกือบเท่ากันมาลบกัน ในตัวอย่างต่อไปนี้e = 5; s = 1.234571 และe = 5; s = 1.234567 เป็นค่าประมาณของจำนวนตรรกยะ 123457.1467 และ 123456.659 ตามลำดับ
e=5; s=1.234571 − e=5; s=1.234567 ---------------- e=5; s=0.000004 e=−1; s=4.000000 (หลังการปัดเศษและปรับค่ามาตรฐาน)
ความแตกต่างของจุดลอยตัวจะถูกคำนวณอย่างแม่นยำเนื่องจากตัวเลขอยู่ใกล้กัน— ทฤษฎีบทของ Sterbenzรับประกันสิ่งนี้ แม้ในกรณีที่เกิด underflow เมื่อ รองรับ underflow แบบค่อยเป็นค่อยไปถึงกระนั้น ความแตกต่างของตัวเลขดั้งเดิมคือe = −1; s = 4.877000 ซึ่งแตกต่างจากความแตกต่าง e = −1; s = 4.000000 ของค่า ประมาณมากกว่า 20% ในกรณีที่รุนแรง ตัวเลขที่มีนัยสำคัญของความแม่นยำอาจสูญหายไปได้[ 12 ] [ 13 ]การหักล้างนี้แสดงให้เห็นถึงอันตรายในการสมมติว่าตัวเลขทั้งหมดของผลลัพธ์ที่คำนวณได้มีความหมาย การจัดการกับผลที่ตามมาของข้อผิดพลาดเหล่านี้เป็นหัวข้อหนึ่งในการวิเคราะห์เชิงตัวเลขดูเพิ่มเติมที่ปัญหาความแม่นยำ
การคูณ
ในการคูณ ตัวเลขสำคัญจะถูกคูณกัน ในขณะที่เลขชี้กำลังจะถูกบวกกัน และผลลัพธ์จะถูกปัดเศษและปรับให้เป็นค่ามาตรฐาน
e=3; s=4.734612 × e=5; s=5.417242 ----------------------- e=8; s=25.648538980104 (ผลคูณที่แท้จริง) e=8; s=25.64854 (หลังการปัดเศษ) e=9; s=2.564854 (หลังการปรับค่ามาตรฐาน)
การหารก็ทำในลักษณะเดียวกัน แต่ซับซ้อนกว่า
การคูณหรือการหารไม่มีปัญหาเรื่องการยกเลิกหรือการดูดซับ แม้ว่าข้อผิดพลาดเล็กๆ น้อยๆ อาจสะสมขึ้นได้เมื่อทำการคำนวณซ้ำๆ ในทางปฏิบัติ วิธีการดำเนินการเหล่านี้ในตรรกะดิจิทัลอาจค่อนข้างซับซ้อน
ดูเพิ่มเติม
อ่านเพิ่มเติม
- เลขทศนิยมแบบจุดลอยตัว: อัลกอริทึมสำหรับคอมพิวเตอร์ , รายงานการประชุมสัมมนาวิชาการด้านเลขคณิตคอมพิวเตอร์ครั้งที่ 16 ของ IEEE ( Cowlishaw, Mike F. , 2003)
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ จุดลอยตัวทศนิยม
เลขคณิต ทศนิยมลอยตัว ( DFP ) หมายถึงทั้งการแสดงผลและการดำเนินการกับ เลข ทศนิยมลอยตัวการทำงานโดยตรงกับเศษส่วนทศนิยม (ฐาน 10)...
การนำไปใช้
การใช้งานเลขทศนิยมแบบลอยตัวในเชิงกลไกในยุคแรกๆ นั้นเห็นได้ชัดใน ลูกคิด ไม้บรรทัด คำนวณ เครื่อง คิดเลข Smallwood และ เครื่องคิดเลข อื่นๆ บางรุ่น ที่รองรับการป้อนค่าใน รูปแบบสัญกรณ์วิทยาศาสตร์ ในกรณีของเครื่องคิดเลขเชิงกลไก...
การเข้ารหัส IEEE 754-2008
มาตรฐาน IEEE 754-2008 กำหนดรูปแบบการแสดงค่าทศนิยมแบบ 32 บิต 64 บิต และ 128 บิต เช่นเดียวกับรูปแบบค่าทศนิยมแบบไบนารี ตัวเลขจะถูกแบ่งออกเป็นเครื่องหมาย เลขชี้กำลัง และ ส่วนสำคัญ แต่แตกต่างจากค่าทศนิยมแบบไบนารีตรงที่ตัวเลขไม่จำเป็นต้องถูกทำให้เป็นมาตรฐานเสมอไป...
ฟิลด์ตัวเลขจำนวนเต็มไบนารีที่มีนัยสำคัญ
รูปแบบนี้ใช้ตัวเลขสำคัญแบบไบนารีตั้งแต่ 0 ถึง 10 p −1 ตัวอย่างเช่น ตัวเลขสำคัญของ Decimal32 สามารถมีค่าได้ถึง 10 7 −1 = 9 999 999 = 98967F 16 = 1001 1000100101 1001111111 2 ในขณะที่การเข้ารหัสสามารถแสดงตัวเลขสำคัญที่มีค่ามากกว่านี้ได้...