我正在閱讀 math/big 包的文檔:https://golang.org/pkg/math/big/#pkg-constants我試圖了解一個數字對于 math.big 來說太大了,這看起來像是我可以詢問的常數。我在我的機器上看到:fmt.Println(math.MaxUint32)
4294967295為了計算的目的,這與我機器上可能的最大整數有什么關系?這個數字的單位是什么?這是字節,小數位還是數字本身以外的其他東西?
1 回答

楊__羊羊
TA貢獻1943條經驗 獲得超7個贊
bignum庫通常將大數字存儲為數字序列(例如,以2 64為基數)。它們的局限性與可用內存有關。因此,您可以表示的最大數字取決于您的虛擬地址空間的限制。您可以安全地假設即使大到 10 10000的數字也可以用 bignum 表示。當然,googolplex不能表示為 bignum(因為它的位數多于宇宙中的粒子數)。
另一個限制是算術運算的復雜性。但是存在非常有效的 bignum 算法。
FWIW,只要有內存,GMPlib (bignums 的 C 庫)就可以處理數字。然而,有傳言說當malloc
失敗時,GMPlib 正在中止。
我不知道當數字太大而無法表示時 Go bignums 內部會發生什么(并且該限制因一臺機器而異,并且可能因一次運行而異)。例如,Go 的Int.Mul給出了一個乘積,其大小是參數大小的總和,并且“內存不足”錯誤沒有記錄(但顯然可能發生)。
使用 bignums 時,更喜歡迭代算法而不是遞歸算法。例如,一個簡單的遞歸階乘可能會溢出足夠大的 bignums 的調用堆棧,所以你想迭代地編寫它。
- 1 回答
- 0 關注
- 279 瀏覽
添加回答
舉報
0/150
提交
取消