一尘不染

JavaScript对大整数求和

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


阅读 310

收藏
2020-05-01

共1个答案

一尘不染

JavaScript在内部使用浮点数。

换句话说,您不能使用超过53位。在某些实现中,您可能被限制为31岁。

尝试将位存储在多个变量中,使用字符串或获取bignum库,或者如果只需要处理整数,则使用biginteger库。

2020-05-01