Go | 大數套件的函式與介紹
💬 簡介
Go 語言內建的 math/big
套件提供了對「任意精度運算(arbitrary-precision)」的支援。
這對於處理超過一般數值範圍的應用場景(如密碼學、金融計算、科學模擬)相當實用。
本篇將介紹
big.Int
(大整數)與big.Float
(高精度浮點數)的使用方式與常見操作,讓你可以輕鬆進行高精度運算。
圖片來源:Gophers
💡 套件匯入與基本型別
1 | import ( |
類型 | 功能說明 |
---|---|
big.Int |
任意精度整數 |
big.Float |
任意精度浮點數(含小數) |
big.Rat |
有理數(分數)表示 |
🔢 建立大整數 big.Int
1 | a := big.NewInt(1234567890123456789) |
使用
new(big.Int)
產生結果容器,避免原始變數被覆蓋。
📌 支援的基本操作函式
函式名稱 | 說明 |
---|---|
Add(x, y) |
相加 |
Sub(x, y) |
相減 |
Mul(x, y) |
相乘 |
Div(x, y) |
相除(整數除法) |
Mod(x, y) |
取餘數 |
Exp(x, y, m) |
x^y mod m |
Cmp(x) |
比較(-1, 0, 1) |
✳️ 建立高精度浮點數 big.Float
1 | x := new(big.Float).SetFloat64(3.1415926535) |
預設精度為 53 bits(與 float64 相同),可透過
SetPrec()
設定更高精度。
🎯 高精度運算應用:複利計算
1 | package main |
🧷 大整數的字串轉換
1 | n := new(big.Int) |
SetString(str, base)
:將字串轉為大整數,支援不同進位(2, 10, 16 等)String()
:轉為字串輸出
🔍 常見用途場景
應用場景 | 適用類型 | 說明 |
---|---|---|
密碼學運算 | big.Int |
大質數、模運算 |
精準金融計算 | big.Float |
銀行利息、累積誤差控制 |
科學數據模擬 | big.Float |
精密常數、多次運算避免誤差擴大 |
分數運算 | big.Rat |
有理數比例運算 |
⚠️ 注意事項
big.Int
、big.Float
為參照型別,方法呼叫會修改自身值。- 所有數學運算皆為「傳入目的變數」風格,例如
z.Mul(x, y)
,而非z = x * y
。 - 若需避免變數覆蓋,建議每次建立新的
new(big.Int)
或new(big.Float)
結果容器。
🎯 總結
Go 的 math/big
套件是處理超大數值與高精度運算的強大工具:
- ✅ 提供
big.Int
、big.Float
、big.Rat
三種精確類型 - ✅ 支援任意精度與進位制表示
- ✅ 符合數學運算需求的函式介面
- ✅ 適用於密碼學、科學計算、金融模型等領域
掌握這套工具,就能突破數值限制,開拓更精準的運算可能!
最後建議回顧一下 Go | 菜鳥教學 目錄,了解其章節內容。
註:以上參考了
Go