javascript如何处理大整数(大于52位)?

考虑以下代码(节点v5.0.0)

const a = Math.pow(2, 53)

const b = Math.pow(2, 53) + 1

const c = Math.pow(2, 53) + 2

console.log(a === b) // true

console.log(a === c) // false

为什么a === b是真的?

javascript可以处理的最大整数值是多少?

我正在实现最大2 ^ 64的随机整数生成器。我应该注意任何陷阱吗?

回答:

。:: JavaScript仅支持53位整数::。

JavaScript中的所有数字均为浮点数,这意味着整数始终表示为

sign × mantissa × 2exponent

尾数有53位。您可以使用指数获取更高的整数,但是它们不再是连续的。例如,通常需要将尾数乘以2(指数1)才能达到第54位。

但是,如果乘以2,则只能表示第二个整数:

Math.pow(2, 53)      // 54 bits 9007199254740992

Math.pow(2, 53) + 1 // 9007199254740992

Math.pow(2, 53) + 2 //9007199254740994

Math.pow(2, 53) + 3 //9007199254740996

Math.pow(2, 53) + 4 //9007199254740996

加法期间的舍入效果使事情对于奇数增量(+1与+3)无法预测。实际表示有点复杂,但是此说明应该可以帮助您理解基本问题。

您可以安全地使用strint库在字符串中编码大整数并对其执行算术运算。

这是全文。

以上是 javascript如何处理大整数(大于52位)? 的全部内容, 来源链接: utcz.com/qa/424772.html

回到顶部