javascript中连续整数的最大范围

javascript中连续整数的最大范围,javascript,floating-point,Javascript,Floating Point,如果有人想知道 我试图找出Javavscript可以表示的最大整数,它可以是连续数字范围的一部分。起初,我认为仅仅使用Number.MAX_值是可行的,但这是一个愚蠢的假设 Javascript按照IEEE 754标准将所有数字存储为双精度浮点数 Number.MAX_值等于 7fef ffff ffff ffff, approximately 1.7976931348623157e+308. 可以以这种格式存储的下一个最小数字是 7fef ffff ffff fffe, approxima

如果有人想知道

我试图找出Javavscript可以表示的最大整数,它可以是连续数字范围的一部分。起初,我认为仅仅使用Number.MAX_值是可行的,但这是一个愚蠢的假设

Javascript按照IEEE 754标准将所有数字存储为双精度浮点数

Number.MAX_值等于

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为增量添加的脚本,而是在IEEE双精度浮点的Wikipedia页面上注意到以下文本:

“在2^52=4503599627370496和2^53=9007199254740992之间,可表示的数字正好是整数。对于下一个范围,从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

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

在IEEE
double
中可以精确表示的整数范围是-2^53+1到2^53-1。@Joni-我想你是对的,然而,有些浏览器在极端情况下会有一些怪癖,因此OP应该进行彻底的测试。你可能想检查你是否在做任何事情,而不是研究这个问题。@Joni,考虑到我答案中的不等式,可以表示的最大正整数不是2^53(而不是2^53-1)吗
Math.pow(2,53)==9007199254740992
Math.pow(2,53)-1==9007199254740991
但是可以在2^53-1和2^53之间显示差异,或者控制台输出中显示的差异是由于四舍五入造成的吗?