5

Javascript 中的所有数字都是 64 位(8 字节)浮点数,但为什么 JavaScript 的有效范围是 5e-324(负)到 1.7976931348623157e+308(正)?

4

2 回答 2

8

因为这是IEEE 754 规范所定义的

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)
于 2012-04-30T15:11:59.270 回答
4

因为非规范值;参见例如http://en.wikipedia.org/wiki/Denormal_number。这些扩展了浮点值的范围,以允许值比其他情况更接近零。

建议您将这些视为实现细节,其目的是使具有非常小的中间结果的计算不会表现得过于病态;当您使用这些非常小的值时,会丢失一些精度。

于 2012-04-30T15:12:57.537 回答