大整數精確計算器|基於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位)或斐波那契數列較遠項的問題也十分常見。由於普通數值型別在計算過程中會混入誤差,是否熟練掌握大整數處理往往直接影響解題的正確率。