julia c^3 结果错误,负数

julia c^3 results in wrong, negative number

所以我使用光速 c 在 VScode 中做了一些计算,我发现了这个:

julia> c = 3*10^8
300000000

julia> c^3
-1238598680542445568

显然是错误的。 但是如果我将 c 定义为浮点数:

julia> c = 3.0*10^8
3.0e8

julia> c^3
2.7e25

然后一切都很好。 怎么了?这是 julia 的固有错误还是我问了一些愚蠢的问题?

为此使用 BigInts,因为 Julia 中的整数通常是 64 位:

julia> c = big(3*10^8)
300000000

julia> typeof(c)
BigInt

julia> c^3
27000000000000000000000000

这是int类型的溢出行为

julia> x = typemax(Int64)
9223372036854775807

julia> x + 1
-9223372036854775808

julia> x + 1 == typemin(Int64)
true

虽然浮点数不是精确值,并且它们分别处理尾数和指数,因此即使对于大阶计算,它们也能够return正确答案。