大整數精確計算器|基於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次方的巨大整數計算示例,可以立即體會與普通計算器的差異。
常見問題
閒話 ― 計算機為何不擅長處理"大數字"
計算機的數值表示長期以來存在限制。大多數程式語言預設使用的64位浮點數(雙精度)只能安全表示到2的53次方減1(9,007,199,254,740,991)為止的整數,這是因為其尾數部分只有53位。超過這個範圍,表示這些整數時就會產生舍入誤差。我們網站自己的"計算器"工具也同樣存在這個精度上限。
任意精度整數(俗稱bignum)正是為了解決這個問題而生。大約從2020年起,JavaScript在所有主流瀏覽器中標準搭載了名為BigInt的新型別,只要記憶體允許,就能在不限位數的情況下精確處理整數。不過其內部是以陣列形式管理大量位數的,因此位數越多計算耗時也越長,存在精確度與速度之間的權衡。
這項技術在密碼學領域也不可或缺。例如RSA加密的金鑰常常使用2048位(十進位制超過600位)的整數,全世界的加密軟體都依賴任意精度整數庫來準確完成這類巨大數字的乘法和模冪運算。
在競技程式設計的世界裡,求較大階乘(例如100的階乘有158位)或斐波那契數列較遠項的問題也十分常見。由於普通數值型別在計算過程中會混入誤差,是否熟練掌握大整數處理往往直接影響解題的正確率。