大整数精确计算器|基于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 (精确) |
什么是大整数的精确计算
普通的计算器与编程语言的数值类型(如 JavaScript 的 Number)无法精确处理超过2的53次方−1(9,007,199,254,740,991)的整数,位数越大越会产生舍入误差。大整数的精确计算,就是突破这一界限、无论多少位都能无误差地进行加减乘除与乘方。
本工具使用 JavaScript 的 BigInt 类型进行计算,位数实质上没有上限,即便是密码学或竞赛编程中处理的数百位整数也能返回严格的结果。整数除法会同时显示商与余数;乘方容易产生巨大的结果,因此对指数设有安全上限。
大整数计算器的使用方法
- 输入第一个整数(A) 输入想要计算的整数。即便含有千位分隔逗号也会被自动去除。
- 选择运算符 从加法、减法、乘法、整数除法(商与余数)、乘方中选择想进行的运算。
- 输入第二个整数(B) 输入运算所需的另一个整数。若为乘方,B 即为指数。
- 确认结果 会随输入实时显示结果与位数。若为整数除法,则商与余数会一并显示。
用好本工具的小技巧
- 普通计算器和电子表格软件的数值类型一旦超过2的53次方(约900万亿)就会产生误差,而本工具使用BigInt,可以在不限位数的情况下精确计算。
- 整数除法(÷)会同时显示商和余数,方便验证加密和哈希计算中常用的取模运算。
- 为了安全起见,乘方的指数上限设为100万,因为指数过大可能导致浏览器无响应。
- 输入框中即使包含千位分隔符(例如
1,234,567)也会在计算前自动去除,因此可以直接粘贴带分隔符的数值。 - 点击"插入示例"按钮,会自动填入一个超过2的53次方的巨大整数计算示例,可以立即体会与普通计算器的差异。
大整数计算器的应用场景
密码算法的检算
可用于 RSA 密钥生成等伴随数百至数千位整数运算的密码技术的学习与检算。
竞赛编程的答案核对
可迅速检算大阶乘或斐波那契数列远端项等涉及多倍长整数的题目的预期解。
巨大数值数据的误差确认
可把用表格软件或普通计算器算出的结果与精确值相互对照,确认是否超过2的53次方而产生了误差。
数学自由研究与学习
可一边用实际数值确认位数众多之数的乘方与余数如何增长,一边加以学习。
大整数计算相关术语集
- BigInt
- JavaScript 中用于精确处理位数无上限整数的数据类型。与普通的 Number 类型不同,超过2的53次方的整数也能无误差地计算。
- 多倍长整数(bignum)
- 用于表示超出计算机标准可处理范围、位数不受限制的整数的机制。内部会把众多位数以数组方式管理后进行计算。
- Number.MAX_SAFE_INTEGER
- JavaScript 的 Number 类型能够无误差安全处理的最大整数(2的53次方−1 = 9,007,199,254,740,991)。超过之后相邻整数便无法区分。
- 整数除法
- 不把除法结果化为小数,而是分为商(整数部分)与余数求取的计算方式。含有负数时,商按向0方向截断计算。
- RSA 密码
- 以两个大素数之积作为密钥的公开密钥密码方式。使用2048位(十进制超过600位)整数运算的情形并不少见,多倍长整数的处理不可或缺。
常见问题
闲话 ― 计算机为何不擅长处理"大数字"
计算机的数值表示长期以来存在限制。大多数编程语言默认使用的64位浮点数(双精度)只能安全表示到2的53次方减1(9,007,199,254,740,991)为止的整数,这是因为其尾数部分只有53位。超过这个范围,表示这些整数时就会产生舍入误差。我们网站自己的"计算器"工具也同样存在这个精度上限。
任意精度整数(俗称bignum)正是为了解决这个问题而生。大约从2020年起,JavaScript在所有主流浏览器中标准搭载了名为BigInt的新类型,只要内存允许,就能在不限位数的情况下精确处理整数。不过其内部是以数组形式管理大量位数的,因此位数越多计算耗时也越长,存在精确度与速度之间的权衡。
这项技术在密码学领域也不可或缺。例如RSA加密的密钥常常使用2048位(十进制超过600位)的整数,全世界的加密软件都依赖任意精度整数库来准确完成这类巨大数字的乘法和模幂运算。
在竞技编程的世界里,求较大阶乘(例如100的阶乘有158位)或斐波那契数列较远项的问题也十分常见。由于普通数值类型在计算过程中会混入误差,是否熟练掌握大整数处理往往直接影响解题的正确率。