JavaScript对大整数求和

在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中使用整数而不是浮点数?还是大整数求和?


天涯尽头无女友
浏览 321回答 3
3回答

哔哔one

JavaScript在内部使用浮点数。一个数字可以在不损失精度的情况下达到的JavaScript的最高整数值是多少?换句话说,您不能使用超过53位。在某些实现中,您可能被限制为31岁。尝试将位存储在多个变量中,使用字符串或获取bignum库,或者如果只需要处理整数,则使用biginteger库。

慕慕森

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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript