我在閱讀second chapter of the book Eloquent JavaScript。作者指出:JavaScript中的最大整數值
Any whole number less than 2^52 (which is more than 10^15) will safely fit in a JavaScript number.
我抓住的2^52的值從wikipedia。
4,503,599,627,370,496
的值必須小於2^52,所以我從初始值中減去1;
var max = 4503599627370495;
定義最大變量我檢查什麼的(我使用Chrome 32.0.1700.77
)的值之後。
console.log(max); // 4503599627370495
我想看到的時候我去了這個限制會發生什麼,所以我加入一個好幾次。
沒想到:
max += 1;
console.log(max); // 4503599627370496
max += 1;
console.log(max); // 4503599627370497
max += 1;
console.log(max); // 4503599627370498
我走到了極限,計算仍精確。
我試過2的下一個動力,而不是2^53,我沒有1。減去這個時候:
9,007,199,254,740,992
var max = 9007199254740992;
這一次似乎是一個更大的限制,似乎我可以很安全地添加和減少數字:
max += 1;
console.log(max); // 9007199254740992
max += 1;
console.log(max); // 9007199254740992
max -= 1;
console.log(max); // 9007199254740991
max += 1;
console.log(max); // 9007199254740992
max -= 900;
console.log(max); // 9007199254740092
max += 900;
console.log(max); // 9007199254740992
我可以給最大值分配一個更大的值,但它會失去精度,我無法再安全地添加或減去數字。
您能否正確解釋引擎蓋下的機制?比例超過2^52之後,會發生什麼情況會很有幫助。
我不認爲它是一個騙局,但僅供參考:http://stackoverflow.com/q/307179/1169798 – Sirko