为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 324 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号