ความแม่นยำของเลขทศนิยม Floating Point
จำนวนทศนิยมใน JavaScript ส่วนใหญ่เก็บเป็น IEEE 754 binary64 จึงแทนทศนิยมบางค่าอย่างแม่นยำไม่ได้ การแสดงผลควรปัดเฉพาะตอนแสดง ไม่ปัดค่าระหว่างคำนวณโดยไม่จำเป็น
ทำไมทศนิยมจึงมีเศษเล็กน้อย
Number ใน JavaScript เก็บค่าด้วยเลขฐานสองแบบ floating point ทำให้ทศนิยมบางค่าแทนได้เพียงค่าประมาณ เช่น 0.1+0.2 อาจเป็น 0.30000000000000004 การแสดงหน้าจอเป็น 0.3 คือการปัดเพื่ออ่านง่าย ไม่ใช่การเปลี่ยนค่าภายในให้เที่ยงตรงทุกหลัก
ตรวจผลอย่างเหมาะสม
ถ้าคำนวณผกผันเมทริกซ์ [[1,2],[3,4]] อาจพบ −1.9999999999999996 แทน −2 ให้ตรวจด้วยการคูณกลับและค่าคลาดเคลื่อนที่เหมาะกับขนาดโจทย์ ไม่ใช้การเทียบเท่าตรงตัวกับทุกผลทศนิยม และไม่ควรใช้ tolerance เดียวกับข้อมูลทุกขนาด เมทริกซ์เกือบเอกฐานอาจขยายความคลาดเคลื่อนมากกว่ากรณีปกติ
งานที่ต้องแม่นยำต่างกัน
เก็บค่าระหว่างขั้นตอนให้ละเอียดและปัดตอนรายงาน งานจำนวนเต็มขนาดใหญ่ใช้ BigInt ได้ แต่งานทศนิยมแน่นอนต้องใช้ระบบเลขทศนิยม/ตรรกยะที่เหมาะสม การเปลี่ยนเป็น BigInt ไม่ช่วยเก็บเศษทศนิยม
เครื่องมือที่เกี่ยวข้อง: วิทยาศาสตร์ · ระบบสมการ · เมทริกซ์ · น้ำหนักเหล็ก · ปริมาตรถัง · วงกลม
คำถามที่พบบ่อย
ความแม่นยำของเลขทศนิยม Floating Point หมายถึงอะไร?
จำนวนทศนิยมใน JavaScript ส่วนใหญ่เก็บเป็น IEEE 754 binary64 จึงแทนทศนิยมบางค่าอย่างแม่นยำไม่ได้ การแสดงผลควรปัดเฉพาะตอนแสดง ไม่ปัดค่าระหว่างคำนวณโดยไม่จำเป็น
มีตัวอย่างอย่างไร?
0.1 + 0.2 อาจไม่เท่ากับ 0.3 แบบเปรียบเทียบตรงตัว เมทริกซ์ที่เกือบเอกฐานจะยิ่งขยายความคลาดเคลื่อน ค่าทางวิศวกรรมต้องตรวจความแม่นยำที่งานต้องการ