gpt4 book ai didi

julia - 理解 BigInt 的使用

转载 作者:行者123 更新时间:2023-12-04 13:49:57 25 4
gpt4 key购买 nike

我正在努力理解如何使用 BigInt正确。在我看来应该使用 BigIntInt64Int128还不够,显然BigInt使用任意精度算术(我不知道)。

假设我想计算一些大数的阶乘,例如30.不知道需要多少位才能存储factorial(30)但两者

test = Int128
test = factorial(30)


test = BigInt
test = factorial(30)

生产 -8764578968847253504这显然是不正确的。

根据 Julia lang 文档,似乎为此类型(BigInt)定义了常用的数学运算符,并将结果提升为 BigInt .因此我看不到我做错了什么,我显然误解了一些东西。希望你们中的一些人能给我一个解释:)

PS:如果有什么要说的,我正在运行 64 位版本的 Windows 7

最佳答案

factorial将计算出与参数相同类型的结果,所以

test = factorial(BigInt(30))  

会工作,将使用 BigInt在整个计算过程中。
test = BigInt(factorial(30))

不起作用,会将已经溢出的 Int 结果转换为 BigInt。
test = BigInt(factorial(BigInt(30)))

可以工作,但外部 BigInt 是多余的,因为结果已经是 BigInt。

你写的代码
test = BigInt
test = factorial(30)

本质上是没有意义的。你说

According to the Julia lang documentation, it seems that the usual mathematical operators are defined for this type (BigInt), and the results are promoted to a BigInt.



所以我猜你认为这意味着“结果应该是 BigInt”,但事实并非如此。它分配类型 BigInt到变量测试,然后计算 factorialInt文字 30。然后将其存储在 test 中,压缩之前的值,即 BigInt .也许查看手册的类型部分。 Julia 不会自动提升 IntsBigInts溢出 - 你需要从 BigInt 开始.这是出于性能(和其他)原因。

大多数操作定义在 BigInt s - 只有一些线性代数运算(如特征值)可能不是。只需将您的号码更改为 BigInt一次,它将在整个计算过程中传播。大多数人永远不需要 BigInt s - 往往只出现在研究环境中。 Int (这与平台整数大小相同,因此在您的计算机上 Int64)变得非常大 - 并且速度很快。

关于julia - 理解 BigInt 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26237799/

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