大整数精确计算器|基于BigInt的无位数限制加减乘除与乘方

免费工具,可对位数极多的巨大整数进行零误差的精确计算。基于JavaScript的BigInt实现,即使超过9,007,199,254,740,991(2的53次方减1)也能准确完成加法、减法、乘法、整数除法(商和余数)与乘方运算。

为什么超过2的53次方会产生误差

普通计算器和JavaScript的数值类型(Number)一旦超过2的53次方(Number.MAX_SAFE_INTEGER),就无法区分相邻的整数。使用BigInt可以突破这一限制进行精确计算。

Number.MAX_SAFE_INTEGER 9,007,199,254,740,991(253 − 1)
9007199254740992 + 1 Number: 9007199254740992(誤り) / BigInt: 9007199254740993(正確)

使用技巧

  • 普通计算器和电子表格软件的数值类型一旦超过2的53次方(约900万亿)就会产生误差,而本工具使用BigInt,可以在不限位数的情况下精确计算。
  • 整数除法(÷)会同时显示商和余数,方便验证加密和哈希计算中常用的取模运算。
  • 为了安全起见,乘方的指数上限设为100万,因为指数过大可能导致浏览器无响应。
  • 输入框中即使包含千位分隔符(例如1,234,567)也会在计算前自动去除,因此可以直接粘贴带分隔符的数值。
  • 点击"插入示例"按钮,会自动填入一个超过2的53次方的巨大整数计算示例,可以立即体会与普通计算器的差异。

常见问题

JavaScript的普通数值类型(Number)是IEEE 754双精度浮点数,能够安全表示的整数上限是2的53次方减1(9,007,199,254,740,991)。超过这个范围后,相邻的整数将无法区分,计算结果就会产生误差。本工具通过使用BigInt类型完全避开了这一上限。

不可以。BigInt作为JavaScript标准规范只支持整数,无法表示小数。如需进行包含小数的一般计算,请使用本站的"计算器"工具。

余数的计算方式为 A − (商 × B),其中商是向零方向截断得到的。例如 −7 ÷ 2 的商为 −3,余数为 −1。

适用于普通计算器精度不足的场景,例如验证RSA密钥(数百到数千位的整数运算)、计算大阶乘、或在竞技编程中核对任意精度整数运算的结果。

没有明确的硬性上限,但会受到浏览器内存和处理速度的实际限制。几千到几万位的数值可以瞬间完成计算,但极端情况(例如乘方指数超过100万)出于安全考虑会被限制。
ツールくん

闲话 ― 计算机为何不擅长处理"大数字"

计算机的数值表示长期以来存在限制。大多数编程语言默认使用的64位浮点数(双精度)只能安全表示到2的53次方减1(9,007,199,254,740,991)为止的整数,这是因为其尾数部分只有53位。超过这个范围,表示这些整数时就会产生舍入误差。我们网站自己的"计算器"工具也同样存在这个精度上限。

任意精度整数(俗称bignum)正是为了解决这个问题而生。大约从2020年起,JavaScript在所有主流浏览器中标准搭载了名为BigInt的新类型,只要内存允许,就能在不限位数的情况下精确处理整数。不过其内部是以数组形式管理大量位数的,因此位数越多计算耗时也越长,存在精确度与速度之间的权衡。

这项技术在密码学领域也不可或缺。例如RSA加密的密钥常常使用2048位(十进制超过600位)的整数,全世界的加密软件都依赖任意精度整数库来准确完成这类巨大数字的乘法和模幂运算。

在竞技编程的世界里,求较大阶乘(例如100的阶乘有158位)或斐波那契数列较远项的问题也十分常见。由于普通数值类型在计算过程中会混入误差,是否熟练掌握大整数处理往往直接影响解题的正确率。

→ 查看全部趣味知识