Go言語 - 巨大な数を扱う
math/bigライブラリを使用することで巨大な整数や有理数を扱うことができます。
フィボナッチ数列を表示するプログラム。
package main import ( "fmt" ) func main() { var f0 uint64 = 1 var f1 uint64 = 1 for i := 1; i < 100; i++ { fmt.Println(i,f0) f0, f1 = f1, f0+f1 if f1 < f0 { fmt.Println("Out of Range") break } } }
結果
uint64型でも93項目でオーバーフローを起こします。
1 1 2 1 3 2 4 3 5 5 91 4660046610375530309 92 7540113804746346429 Out of Range
math/bigを使用したフィボナッチ数列プログラム
package main import ( "fmt" "math/big" ) func main() { f0 := big.NewInt(1) f1 := big.NewInt(1) tmp := big.NewInt(0) for i := 1; i < 1001; i++ { fmt.Println(i,f0.String()) tmp.Add(f0, f1) f0, f1 = f1, tmp if f1.Cmp(f0) == -1 { fmt.Println("Out of Range") break } } }
結果
どこまででも?計算できる。
とりあえず1000項まで。
999 2009078638474251226778296966987503394802634021947875513957031978194408220859 25522967474696027942973398924001172041215029722589741067308883174710829525598277 57377314577795433097664514884491945891021164091536962140594216139876372689173435 39489889449296482099339566226656436330593434867072531976062763008 1000 401815727694850245355659393397500678960526804389575102791406395638881644171 85104593494939205588594679784800234408243005944517948213461776634942165905119655 51475462915559086619532902976898389178204232818307392428118843227975274537834687 078979778898592964198679132453312872661186869734145063952125526016