gpt4 book ai didi

julia - 为什么 2 ^ 3 ^ 4 = 0 在 Julia 中?

转载 作者:行者123 更新时间:2023-12-02 00:59:03 29 4
gpt4 key购买 nike

我刚读了一篇来自 Quora 的帖子: http://www.quora.com/Is-Julia-ready-for-production-use

在底部,有一个答案说:

2 ^ 3 ^ 4 = 0

我自己试过:

julia> 2 ^ 3 ^ 4
0

我个人认为这不是语言中的错误。为了清晰起见,我们可以添加括号,这既是为了 Julia 也是为了我们人类:

julia> (2 ^ 3) ^ 4
4096

到目前为止一切顺利;但是,这不起作用:

julia> 2 ^ (3 ^ 4)
0

因为我在学习,所以我想知道 Julia 如何将这个表达式计算为 0?评估先例是什么?

julia> typeof(2 ^ 3 ^ 4)
Int64

最佳答案

我很惊讶我在 SO 上找不到关于此的重复问题。我想我的回答会与 the FAQ in the manual 略有不同因为这是一个常见的第一个问题。 糟糕,我不知何故错过了:Factorial function works in Python, returns 0 for Julia

假设您学过加法和乘法,但从未学过任何大于 99 的数字。就您而言,根本不存在比这更大的数字。所以你学会了将个数带入十位列,但你甚至不知道将十位带入的那一列是什么。所以你就把它们扔掉。只要你的数字永远不会超过 99,一切都会好起来的。一旦你超过 99,你就会回到 0。所以 99+3 ≡ 2 (mod 100)。并且 52*9 ≡ 68(模 100)。任何时候你用两个以上的因数 10 做乘法,你的答案都是零:25*32 ≡ 0 (mod 100)。现在,在你完成每一次计算之后,有人可能会问你“你超过 99 了吗?”但这需要时间来回答……这些时间可以用来计算你的下一个数学问题!

这实际上是计算机 native 进行算术运算的方式,只是它们以 64 位二进制进行运算。您可以使用 bits 函数查看各个位:

julia> bits(45)
"0000000000000000000000000000000000000000000000000000000000101101"

当我们将它乘以 2 时,101101 将向左移动(就像乘以十进制的 10):

julia> bits(45 * 2)
"0000000000000000000000000000000000000000000000000000000001011010"
julia> bits(45 * 2 * 2)
"0000000000000000000000000000000000000000000000000000000010110100"
julia> bits(45 * 2^58)
"1011010000000000000000000000000000000000000000000000000000000000"
julia> bits(45 * 2^60)
"1101000000000000000000000000000000000000000000000000000000000000"

…直到它开始从末端掉落。如果将超过 64 个二乘在一起,答案将始终为零(就像上面示例中将两个以上的十相乘一样)。我们可以询问计算机是否溢出,但默认情况下,每次计算都会有 some serious performance implications .所以在 Julia 中你必须是明确的。您可以要求 Julia 在特定乘法后检查:

julia> Base.checked_mul(45, 2^60) # or checked_add for addition
ERROR: OverflowError()
in checked_mul at int.jl:514

或者您可以将其中一个参数提升为 BigInt:

julia> bin(big(45) * 2^60)
"101101000000000000000000000000000000000000000000000000000000000000"

在您的示例中,当您使用大整数运算时,您可以看到答案是 1 后跟 81 个零:

julia> bin(big(2) ^ 3 ^ 4)
"1000000000000000000000000000000000000000000000000000000000000000000000000000000000"

有关更多详细信息,请参阅常见问题解答:why does julia use native machine integer arithmetic?

关于julia - 为什么 2 ^ 3 ^ 4 = 0 在 Julia 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30751267/

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