javascript中最大范围的连续整数

时间:2013-10-02 21:58:43

标签: javascript floating-point

如果有人想知道......

我试图找出Javavscript可以表达的最大整数,它可能是连续数字的一部分。起初,我认为只使用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

1 个答案:

答案 0 :(得分:4)

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

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

因此,看起来2 ^ 53将是连续整数范围的高端,并且经过验证

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

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