当前位置: 首页 > 面试题库 >

JavaScript对大整数求和

鞠边浩
2023-03-14
问题内容

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


问题答案:

JavaScript在内部使用浮点数。

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

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



 类似资料:
  • 问题内容: 考虑以下代码(节点v5.0.0) 为什么是真的? javascript可以处理的最大整数值是多少? 我正在实现最大2 ^ 64的随机整数生成器。我应该注意任何陷阱吗? 问题答案: JavaScript中的所有数字均为浮点数,这意味着整数始终表示为 尾数有53位。您可以使用指数获取更高的整数,但是它们不再是连续的。例如,通常需要将尾数乘以2(指数1)才能达到第54位。 但是,如果乘以2,

  • 我正在尝试寻找一个子< code>O(n)方法来计算一个整数数组的和~~~(不是遍历< code>0 - n,我是在< code>n/2中做的)~~~我还是在O(n)中做的。 我的算法适用于偶数个整数,但是,当整数数为奇数时,它会将中间索引求和两次: 测试: 输出: 我的问题是——对奇数的中间索引求和的最佳方法是什么?

  • 我想要的结果:相同进度的不要叠加一起,让它往前走一格,第2个0%让它往前走+1变成1%,第3个0%让它往前走2格+2变成2%,若1%,2%已存在,在前面的基础2%,加+1,变成3%,4%,以此类推! 备注:一般只有0%和100%才会出现多个相同的,最多4个相同的数据

  • 问题内容: 嗨,我很难理解为什么这不起作用 莫尔斯电码只是一串数字。问题是它说Integer number太大:4545454545,但是我确定Long可以更长。 问题答案: 您需要使用或将其限定为。默认情况下,是文字,超出的范围。 建议使用大写字母以避免混淆,因为和看起来很相似 你可以做 : 要么 根据JLS 3.10.1 : 如果整数文字 以ASCII字母L或l(ell) 为后缀,则其类型为l

  • 问题内容: 我已经看到了javascript中最奇怪的事情之一。服务器端(弹簧): 我返回一个长值,并: 它将长整数表示为“ 793548328091516900”,将后两位数字(实际上四舍五入)为0。当我从任何浏览器的地址栏中发出GET请求时,数字均正确表示;因此,我认为这是一个js问题。 从服务器返回一个字符串而不是long并使用以下命令处理它: 显然是一个解决方案。但是我不是很幸运,我必须处

  • 给出不同整数的列表 我的想法:< br >一种简单的方法是一个接一个地选择一个元素,看看它形成的完美子集的大小,然后我们可以简单地返回最大值。这将是计算密集型的。< br >有什么好的解决方案吗