gpt4 book ai didi

julia - 了解 Julia Int 溢出行为

转载 作者:行者123 更新时间:2023-12-05 00:54:36 26 4
gpt4 key购买 nike

来自 Python/Matlab 背景,我想更好地了解 Julia 的 Int64 溢出行为是如何工作的。

来自 documentation :

In Julia, exceeding the maximum representable value of a given type results in a wraparound behavior.


julia> x = typemax(Int64)
9223372036854775807

julia> x + 1
-9223372036854775808

现在,我用明显大于 typemax(Int64) 的数字做了一些实验,但我看到的行为与文档不一致。事情似乎并不总是一团糟。是否只允许一个环绕?
julia> x = (10^10)^(10^10)
0
julia> x = 10^10^10^10
1 # ??

julia> x = 10^10^10^10^10
10 # I'd expect it to be 1? 1^10 == 1?

julia> x = 10^10^10^10^10^10
10000000000 # But here 10^10 == 10000000000, so now it works?


julia> typemax(Int64) > 10^19
true
julia > typemax(Int64) > -10^19
true

任何人都可以阐明我所看到的行为吗?

编辑:

为什么 9 正确溢出,而 10 没有?
julia> 9^(10^14)
-1193713557845704703
julia> 9^(10^15)
4900281449122627585
julia> 10^(10^2)
0
julia> 10^(10^3)
0

Julia 0.5.0 (2016-09-19)

最佳答案

您所看到的 PEMDAS 运算顺序的结果,特别是求幂部分之前的括号。这实际上变成了这些表达式的从右到左求解。

julia> 10^(10^10) #happens to overflow to 0
0

julia> 10^(10^(10^10)) # same as 10 ^ 0
1

julia> 10^(10^(10^(10^(10^10)))) # same as x = 10^(10^(10^(10^(10000000000)))) -> 10^(10^(10^(0))) -> 10^(10^(1)) -> 10^ 10
10000000000

所以这真的只是一个通过算术工作的问题。或者意识到您将有如此大的操作,以至于您从一开始就开始使用 BigInt。

关于julia - 了解 Julia Int 溢出行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39795448/

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