Javascript max int

时间:2014-04-03 13:01:39

标签: javascript biginteger bigint

我认为javascript的最大整数值是2 ^ 53,但是当我执行以下操作时:

 parseInt(Math.pow(2, 53)) + 10

我正确得到9007199254741002

 (= 9007199254740992 + 10)

为什么?我想只在数字大于或等于允许的最大整数时才使用bigint.js库。

2 个答案:

答案 0 :(得分:2)

JavaScript使用IEEE-754 double-precision个数字,大致 15位小数精度,但巨大范围。在这种格式中,整个数字-2^532^53都可以可靠地表示(这是格式的有效数字的精度)。超出这些限制,可以表示一些整数,但其他人则不能。例如,在该范围之外,存在整数差距。

例如,双精度数字可以代表9,007,199,254,740,9922^53)和9,007,199,254,740,9942^53 + 2),但不代表9,007,199,254,740,993({{1} }):

控制台会话示例:

> 9007199254740992
9007199254740992
> 9007199254740992 + 1
9007199254740992
> 9007199254740992 + 2
9007199254740994

请注意其中的第二个。这不是一个错字。

答案 1 :(得分:2)

在失去精度问题之前,

9007199254740992是JavaScript中的最大整数值。请考虑以下事项:

> Math.pow(2, 53) + 1
9007199254740992
> Math.pow(2, 53) + 2
9007199254740994
> Math.pow(2, 53) + 3
9007199254740996
> Math.pow(2, 53) + 4

可以看出,结果值在所有情况下都不准确。这是浮点数的限制,因为只有53位专用于系数。一旦超出可用53位加上符号位表示的范围,浮点表示将随着值的增加而变得越来越多。