gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:53:54 24 4
gpt4 key购买 nike

我正在阅读 math/big 包的文档:

https://golang.org/pkg/math/big/#pkg-constants

我试图了解一个数字对于 math.big 来说太大了多少,这看起来像是一个我可以询问的常量。

我在我的机器上看到:

fmt.Println(math.MaxUint32)

4294967295

为了计算的目的,这与我机器上可能的最大整数有什么关系?这个数字的单位是什么?这是字节、小数位还是数字本身以外的其他东西?

最佳答案

bignum图书馆通常将大数字存储为数字序列(例如 base 264)。它们的局限性与可用内存有关。因此,您可以表示的最大数字取决于您的虚拟地址空间的限制。您可以安全地假设即使大到 1010000 的数字也可以用 bignum 表示。当然,一个googolplex不能表示为大数(因为它的位数多于宇宙中的粒子数)。

另一个限制是算术运算的复杂性。但是存在非常有效的 bignum 算法。

FWIW,GMPlib (bignums 的 C 库)只要有内存就可以处理数字。然而,据传当 malloc 失败时,GMPlib 正在中止。

我不知道当数字太大而无法表示时 Go bignums 内部会发生什么(并且该限制因一台机器而异,并且可能因一次运行而异)。例如,Go 的 Int.Mul给出一个乘积,其大小是参数大小的总和,并且“内存不足”错误没有记录(但显然可以发生)。

使用大数时,首选迭代算法而不是递归算法。例如,一个简单的递归阶乘可能会溢出具有足够大的 bignums 的调用堆栈,因此您想对其进行迭代编码。

关于go - golang中math/big包支持的最大值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51914752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com