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

อ่าน 6 นาที

จุดลอยตัวทศนิยม

เลขคณิต ทศนิยมลอยตัว ( DFP ) หมายถึงทั้งการแสดงผลและการดำเนินการกับ เลข ทศนิยมลอยตัวการทำงานโดยตรงกับเศษส่วนทศนิยม (ฐาน 10)...

จุดลอยตัวทศนิยม

เลขคณิต ทศนิยมลอยตัว ( 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⁴เป็นต้น เมื่อส่วนสำคัญเป็นศูนย์ เลขชี้กำลังสามารถเป็นค่าใดก็ได้

รูปแบบเลขทศนิยมแบบลอยตัว IEEE 754-2008
ทศนิยม32ทศนิยม64ทศนิยม128ทศนิยม(32 k )รูปแบบ
1111 ช่องสัญญาณ (บิต)
5555 ฟิลด์ผสม (บิต)
6812w = 2× k + 4 ฟิลด์ต่อเลขชี้กำลัง (บิต)
2050110t = 30× k −10 ฟิลด์ต่อค่าสัมประสิทธิ์ (บิต)
326412832× kขนาดทั้งหมด (บิต)
71634p = 3× t /10+1 = 9× k −2 ขนาดสัมประสิทธิ์ (จำนวนหลักทศนิยม)
192768122883×2 w = 48×4 kช่วงเลขชี้กำลัง
963846144Emax = 3×2 w −1ค่าสูงสุดคือ 9.99...×10 Emax
−95−383−6143Emin = 1−Emax ค่าปกติที่เล็กที่สุดคือ 1.00...×10 Emin
−101−398−6176Etiny = 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 (หลังการปรับค่ามาตรฐาน) 

การหารก็ทำในลักษณะเดียวกัน แต่ซับซ้อนกว่า

การคูณหรือการหารไม่มีปัญหาเรื่องการยกเลิกหรือการดูดซับ แม้ว่าข้อผิดพลาดเล็กๆ น้อยๆ อาจสะสมขึ้นได้เมื่อทำการคำนวณซ้ำๆ ในทางปฏิบัติ วิธีการดำเนินการเหล่านี้ในตรรกะดิจิทัลอาจค่อนข้างซับซ้อน

ดูเพิ่มเติม

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

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Decimal_floating_point&oldid=1335224071 "

สรุปเนื้อหา

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

ข้อมูลสำคัญเกี่ยวกับ จุดลอยตัวทศนิยม

เลขคณิต ทศนิยมลอยตัว ( 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 ในขณะที่การเข้ารหัสสามารถแสดงตัวเลขสำคัญที่มีค่ามากกว่านี้ได้...