2011-01-30 100 views
5

下面的代码的JavaScript整数溢出

console.log(Math.pow(2, 53)); 
console.log(Math.pow(2, 53) + 1); 

产生了两种计算完全相同的输出:

9007199254740992 

为什么?

+0

可能的重复:http://stackoverflow.com/questions/307179/what-is-javascripts-max-int-whats-the-highest-integer-value-a-number-can-go-to – 2011-01-30 01:03:01

回答

10

您看到的结果是因为Math.Pow()正在处理浮点数字,并且当您到达十六进制数字时,您不一定会将一个值添加到该值的最低有效十进制数字,并期望结果发生变化。

通常,在64位(8字节)IEEE 754浮点二进制值中,尾数为53位(包括隐含的1位)。你的计算Math.Pow(2, 53)要求保证尾数有54位。如果您添加2,您应该看到更改。

-3

所有的Javascript数字都是双倍的。

+0

没有。 JavaScript中的所有数字都是64位浮点数。 – simeg 2016-07-10 16:09:43