我来自Python/Matlab背景,希望更好地了解Julia的Int64溢出行为。
从文档中可以看到:
在Julia中,超出给定类型可表示的最大值会导致环绕行为。
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)
10^10^10
是2^64
的倍数,因此刚好循环回到了 0。任何一个大的偶数指数都会发生类似的情况,比如6^666
或者14^5^5
。 - Fengyang Wang