Javascript中的所有数字都是64位(8字节)浮点数 但为什么JavaScript的有效范围是5e-324(负)到1.7976931348623157e + 308(正)?
答案 0 :(得分:8)
因为那就是defined by the IEEE 754 spec。
0x 0000 0000 0000 0001 = 2⁻¹⁰²²⁻⁵² ≈ 4.9406564584124654 x 10⁻³²⁴ (Min subnormal positive double)
0x 000f ffff ffff ffff = 2⁻¹⁰²² - 2⁻¹⁰²²⁻⁵² ≈ 2.2250738585072009 x 10⁻³⁰⁸ (Max subnormal positive double)
0x 0010 0000 0000 0000 = 2⁻¹⁰²² ≈ 2.2250738585072014 x 10⁻³⁰⁸ (Min normal positive double)
0x 7fef ffff ffff ffff = (1 + (1 - 2⁻⁵²)) x 2¹⁰²³ ≈ 1.7976931348623157 x 10³⁰⁸ (Max Double)
答案 1 :(得分:4)
由于非正规值;见例如http://en.wikipedia.org/wiki/Denormal_number。这些扩展了浮点值的范围,使得值可以接近于零。
建议您将这些视为一个实现细节,其目的是使用非常小的中间结果进行计算,而不是过于病态;当你使用这些非常小的值时,会丢失一些精度。