2011-01-30 91 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