亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang中math/big包支持的最大值是多少?

golang中math/big包支持的最大值是多少?

Go
心有法竹 2023-03-21 15:59:58
我正在閱讀 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 的調用堆棧,所以你想迭代地編寫它。


查看完整回答
反對 回復 2023-03-21
  • 1 回答
  • 0 關注
  • 279 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號