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 的固有错误还是我问了一些愚蠢的问题?
为此使用 BigInt
s,因为 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正确答案。
所以我使用光速 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 的固有错误还是我问了一些愚蠢的问题?
为此使用 BigInt
s,因为 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正确答案。