คำศัพท์โรงเรียน และการศึกษา

ความแม่นยำของเลขทศนิยม Floating Point

จำนวนทศนิยมใน JavaScript ส่วนใหญ่เก็บเป็น IEEE 754 binary64 จึงแทนทศนิยมบางค่าอย่างแม่นยำไม่ได้ การแสดงผลควรปัดเฉพาะตอนแสดง ไม่ปัดค่าระหว่างคำนวณโดยไม่จำเป็น

ภาพประกอบ ความแม่นยำของเลขทศนิยม Floating Point

ทำไมทศนิยมจึงมีเศษเล็กน้อย

Number ใน JavaScript เก็บค่าด้วยเลขฐานสองแบบ floating point ทำให้ทศนิยมบางค่าแทนได้เพียงค่าประมาณ เช่น 0.1+0.2 อาจเป็น 0.30000000000000004 การแสดงหน้าจอเป็น 0.3 คือการปัดเพื่ออ่านง่าย ไม่ใช่การเปลี่ยนค่าภายในให้เที่ยงตรงทุกหลัก

ตรวจผลอย่างเหมาะสม

ถ้าคำนวณผกผันเมทริกซ์ [[1,2],[3,4]] อาจพบ −1.9999999999999996 แทน −2 ให้ตรวจด้วยการคูณกลับและค่าคลาดเคลื่อนที่เหมาะกับขนาดโจทย์ ไม่ใช้การเทียบเท่าตรงตัวกับทุกผลทศนิยม และไม่ควรใช้ tolerance เดียวกับข้อมูลทุกขนาด เมทริกซ์เกือบเอกฐานอาจขยายความคลาดเคลื่อนมากกว่ากรณีปกติ

งานที่ต้องแม่นยำต่างกัน

เก็บค่าระหว่างขั้นตอนให้ละเอียดและปัดตอนรายงาน งานจำนวนเต็มขนาดใหญ่ใช้ BigInt ได้ แต่งานทศนิยมแน่นอนต้องใช้ระบบเลขทศนิยม/ตรรกยะที่เหมาะสม การเปลี่ยนเป็น BigInt ไม่ช่วยเก็บเศษทศนิยม

เครื่องมือที่เกี่ยวข้อง: วิทยาศาสตร์ · ระบบสมการ · เมทริกซ์ · น้ำหนักเหล็ก · ปริมาตรถัง · วงกลม

อ่าน MDN: ความแม่นยำและการเปรียบเทียบ Number

คำถามที่พบบ่อย

ความแม่นยำของเลขทศนิยม Floating Point หมายถึงอะไร?

จำนวนทศนิยมใน JavaScript ส่วนใหญ่เก็บเป็น IEEE 754 binary64 จึงแทนทศนิยมบางค่าอย่างแม่นยำไม่ได้ การแสดงผลควรปัดเฉพาะตอนแสดง ไม่ปัดค่าระหว่างคำนวณโดยไม่จำเป็น

มีตัวอย่างอย่างไร?

0.1 + 0.2 อาจไม่เท่ากับ 0.3 แบบเปรียบเทียบตรงตัว เมทริกซ์ที่เกือบเอกฐานจะยิ่งขยายความคลาดเคลื่อน ค่าทางวิศวกรรมต้องตรวจความแม่นยำที่งานต้องการ

เครื่องมือที่เกี่ยวข้อง

← ดูบทความทั้งหมด