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 9007199254740992Math.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