3

如果有人想知道...

我试图找出 Javascript 可以表达的最大整数,它可能是连续数字范围的一部分。起初,我认为只使用 Number.MAX_VALUE 就可以了,但这是一个愚蠢的假设。

Javascript 将所有数字存储为双精度浮点数,遵循 IEEE 754 标准。

Number.MAX_VALUE 等于

7fef ffff ffff ffff, approximately 1.7976931348623157e+308. 

可以以这种格式存储的下一个最小数字是

7fef ffff ffff fffe, approximately 1.7976931348623155e+308.

这两个数字之间显然存在相当大的差距,导致诸如

Number.MAX_VALUE == (Number.MAX_VALUE-1) //true

现在,这并没有吓到我或任何事情,这只是事实。我正在寻找的是当这个下一个条件在 JS 中第一次为真时

x == (x+1) //true
4

1 回答 1

4

在满足上述条件之前,我没有编写简单地以 1 为增量添加的脚本,而是在 IEEE 双精度浮点的 Wikipedia 页面上注意到以下文本:

“在 2^52=4,503,599,627,370,496 和 2^53=9,007,199,254,740,992 之间,可表示的数字恰好是整数。对于下一个范围,从 2^53 到 2^54,一切都乘以 2,因此可表示的数字是偶数, ETC。”

因此,似乎 2^53 将是连续整数范围的高端,并通过验证

Math.pow(2,53) == Math.pow(2,53)+1 //true
Math.pow(2,53) == Math.pow(2,53)-1 //false

我实际上并不需要那个范围的低端,但如果有人知道它是什么可能会很有趣。

于 2013-10-02T21:58:43.050 回答