在JavaScript中,我想使用以下方法创建大型布尔数组(54个元素)的二进制哈希:function bhash(arr) { for (var i = 0, L = arr.length, sum = 0; i < L; sum += Math.pow(2,i)*arr[i++]); return sum;}简而言之:它创建了最小的整数来存储布尔数组。现在我的问题是javascript显然使用浮点数作为默认值。我必须创建的最大数量是2 ^ 54-1,但是一旦javascript达到2 ^ 53,它就会开始做一些奇怪的事情:9007199254740992+1 = 9007199254740994有没有办法在JavaScript中使用整数而不是浮点数?还是大整数求和?
3 回答
哔哔one
TA贡献1854条经验 获得超8个赞
JavaScript在内部使用浮点数。
一个数字可以在不损失精度的情况下达到的JavaScript的最高整数值是多少?
换句话说,您不能使用超过53位。在某些实现中,您可能被限制为31岁。
尝试将位存储在多个变量中,使用字符串或获取bignum库,或者如果只需要处理整数,则使用biginteger库。
慕慕森
TA贡献1856条经验 获得超17个赞
javascript现在对有了实验性支持BigInt。
在撰写本文时,仅chrome支持此功能。
caniuse尚无任何条目。
BigInt可以与构造函数一起使用,例如,BigInt(20)也可以附加n,例如20n
例:
const max = Number.MAX_SAFE_INTEGER;
console.log('javascript Number limit reached', max + 1 === max + 2) // true;
console.log('javascript BigInt limit reached', BigInt(max) + 1n === BigInt(max) + 2n); // false
添加回答
举报
0/150
提交
取消