4
来自Python/Matlab背景,我想更好地了解Julia的Int64溢出行为如何工作。了解Julia Int溢出行为
在利亚,超过给定类型 导致环绕行为的最大可表示值。现在
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
朱莉娅0.5.0(2016年9月19日)
感谢您的回答。这很有道理。然而为什么10 ^(10^10)会溢出到0,而不是简单地回绕? 10 ^(10^11)也会溢出到0.如果你尝试9 ^(10^14),9 ^(10^15),你会看到事情在他们应该绕过的地方。 – dangom
@dangom它环绕。 '10^10^10'是'2^64'的倍数,所以恰好包围为'0'。偶数的任何大指数都会发生同样的情况,如“6^666”或“14^5^5”。 –
@FenggyangWang的确。我不会期待这一点。感谢您的评论。 [10^100是2^64的倍数](https://www.wolframalpha.com/input/?i=is+10%5E100+a+multiple+of+2%5E64) – dangom