2012-04-30 31 views
5

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

+0

从所有可能的值中,它们的9007199254740990表示为NaN(不是数字)。 –

+0

edwardpku,你应该可以接受MANDIБДLL的答案或者我的答案(取决于你是否找到指向该规范的指针,或者说明规范说明的原因,更有帮助)。 Gareth,谢谢, –

+0

。 :D – edwardpku

回答

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

+特别注意参考文献中的52位尾数。 –

4

由于非正常值;见例如http://en.wikipedia.org/wiki/Denormal_number。这些扩展了浮点值的范围以允许值比其他情况下可能的值更接近零。

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