คนส่วนใหญ่ทำผิดเมื่อพวกเขาเห็นสองครั้งพวกเขากรีดร้อง BigDecimal เมื่อพวกเขาเพิ่งย้ายปัญหาไปที่อื่น Double ให้ Sign bit: 1 bit, Exponent width: 11 bits ความแม่นยำและความสำคัญ: 53 บิต (เก็บไว้ 52 อย่างชัดเจน) เนื่องจากลักษณะของ double, interger ทั้งหมดที่มีขนาดใหญ่กว่าคุณสูญเสียความแม่นยำสัมพัทธ์ ในการคำนวณความแม่นยำสัมพัทธ์ที่เราใช้ในที่นี้คือการร้อง
ความแม่นยำสัมพัทธ์ของสองเท่าในการคำนวณเราใช้ foluma ต่อไปนี้ 2 ^ E <= abs (X) <2 ^ (E + 1)
epsilon = 2 ^ (E-10)% สำหรับทศนิยม 16 บิต (ความแม่นยำครึ่งหนึ่ง)
Accuracy Power | Accuracy -/+| Maximum Power | Max Interger Value
2^-1 | 0.5 | 2^51 | 2.2518E+15
2^-5 | 0.03125 | 2^47 | 1.40737E+14
2^-10 | 0.000976563 | 2^42 | 4.39805E+12
2^-15 | 3.05176E-05 | 2^37 | 1.37439E+11
2^-20 | 9.53674E-07 | 2^32 | 4294967296
2^-25 | 2.98023E-08 | 2^27 | 134217728
2^-30 | 9.31323E-10 | 2^22 | 4194304
2^-35 | 2.91038E-11 | 2^17 | 131072
2^-40 | 9.09495E-13 | 2^12 | 4096
2^-45 | 2.84217E-14 | 2^7 | 128
2^-50 | 8.88178E-16 | 2^2 | 4
กล่าวอีกนัยหนึ่งถ้าคุณต้องการความแม่นยำ +/- 0.5 (หรือ 2 ^ -1) ขนาดสูงสุดที่สามารถเป็นตัวเลขได้คือ 2 ^ 52 ยิ่งใหญ่กว่านี้และระยะห่างระหว่างตัวเลขจุดลอยตัวมากกว่า 0.5
หากคุณต้องการความแม่นยำ +/- 0.0005 (ประมาณ 2 ^ -11) ขนาดสูงสุดที่สามารถเป็นตัวเลขได้คือ 2 ^ 42 ยิ่งใหญ่กว่านี้และระยะห่างระหว่างหมายเลขจุดลอยตัวมากกว่า 0.0005
ฉันไม่สามารถให้คำตอบที่ดีกว่านี้ได้ ผู้ใช้จะต้องทราบถึงความแม่นยำที่ต้องการเมื่อทำการคำนวณที่จำเป็นและค่าหน่วย (เมตร, ฟุต, นิ้ว, มม., ซม.) สำหรับกรณีส่วนใหญ่ลอยตัวจะเพียงพอสำหรับการจำลองง่าย ๆ ขึ้นอยู่กับขนาดของโลกที่คุณกำลังตั้งเป้าที่จะจำลอง
แม้ว่ามันจะเป็นสิ่งที่จะกล่าวถ้าคุณเพียง แต่ตั้งใจที่จะจำลองโลก 100 เมตรโดย 100 เมตรคุณจะมีที่ไหนสักแห่งในความถูกต้องใกล้ 2 ^ -45 สิ่งนี้ไม่ได้รวมไปถึงความทันสมัยของ FPU ภายในซีพียูที่จะทำการคำนวณนอกขนาดของประเภทเนทีฟและหลังจากการคำนวณเสร็จสมบูรณ์พวกเขาจะทำการปัดเศษ (ขึ้นอยู่กับโหมดการปัดเศษ FPU) กับขนาดของเนทีฟ