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

javascript如何处理大整数(大于52位)?

靳彦
2023-03-14
问题内容

考虑以下代码(节点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中的所有数字均为浮点数,这意味着整数始终表示为

sign × mantissa × 2exponent

尾数有53位。您可以使用指数获取更高的整数,但是它们不再是连续的。例如,通常需要将尾数乘以2(指数1)才能达到第54位。

但是,如果乘以2,则只能表示第二个整数:

Math.pow(2, 53)      // 54 bits 9007199254740992
Math.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库在字符串中编码大整数并对其执行算术运算。

这是全文。



 类似资料:
  • 问题内容: 我正在寻找一种数学解决方案,该解决方案可以处理真实(长,大,大,风暴)数字。我还没有发现任何东西,但是我不想现在这个问题还没有解决。我正在寻找一种简单的Number解决方案,例如MicrosoftExcelPrecision(30位十进制)或BigInteger(Java)解决方案。当然是用Java语言编写的。 问题答案: BigInt现在是Firefox和Chrome的一部分; 你不

  • 有时我使用filter,如您所见,有时如果需要,我使用distinct/sort。但是我仍然有很多运行时错误。 我会很乐意提供一些如何处理它的技巧。 @cricket_007 我的代码: 所以基本上,当我试图用嵌套循环解决这个任务时,我得到了O(n^2)的算法复杂度。如何解决?

  • 如果我只有一个内存为25 GB的执行器,并且如果它一次只能运行一个任务,那么是否可以处理(转换和操作)1 TB的数据?如果可以,那么将如何读取它以及中间数据将存储在哪里? 同样对于相同的场景,如果hadoop文件有300个输入拆分,那么RDD中会有300个分区,那么在这种情况下这些分区会在哪里?它会只保留在hadoop磁盘上并且我的单个任务会运行300次吗?

  • 我正在尝试用H2O(3.14)训练机器学习模型。我的数据集大小是4Gb,我的计算机RAM是2Gb,带有2G交换,JDK 1.8。参考本文,H2O可以使用2Gb RAM处理大型数据集。 关于大数据和GC的说明:当Java堆太满时,我们会进行用户模式的磁盘交换,即,您使用的大数据比物理DRAM多。我们不会因GC死亡螺旋而死亡,但我们会降级到核心外的速度。我们将以磁盘允许的速度运行。我个人测试过将12G

  • 问题内容: 在JavaScript中,我想使用以下方法创建大型布尔数组(54个元素)的二进制哈希: 简而言之:它创建了最小的整数来存储布尔数组。现在我的问题是javascript显然使用 浮点数 作为默认值。我必须创建的最大数量是2 ^ 54-1,但是一旦javascript达到2 ^ 53,它就会开始做一些奇怪的事情: 有没有办法在JavaScript中使用整数而不是浮点数?还是大整数求和? 问

  • 主要内容:1.什么是 Redis 大 key,2.大 key 会造成什么问题,3.如何找到大 key,4.如何删除大 key什么是 Redis 大 key 大 key 会造成什么问题 如何找到大 key 如何删除大 key 1.什么是 Redis 大 key 大 key 并不是指 key 的值很大,而是 key 对应的 value 很大。 一般而言,下面这两种情况被称为大 key: String 类型的值大于 10 KB; Hash、List、Set、ZSet 类型的元素的个数超过 5000个;