为什么 Julia 会发生这种情况?
我的输入是
A = []
for i = 17:21
t = 1/(10^(i))
push!(A, t)
end
return(A)
输出是:
5-element Array{Any,1}:
1.0e-17
1.0e-18
-1.1838881245526248e-19
1.2876178137472069e-19
2.5800991659088344e-19
我观察到
A[3]>0
false
我想找到 Julia 的 0 的数字,但我找到了这个,但不明白。
最佳答案
这个问题的原因是当你有i = 19
时,请注意:
julia> 10^19
-8446744073709551616
与 float 无关,而是由Int64
溢出引起的。
下面的代码将按照您的预期工作。使用 10.0
而不是 10
,因为 10.0
是 Float64
值:
julia> A=[]
Any[]
julia> for i=17:21
t=1/(10.0^(i))
push!(A,t)
end
julia> A
5-element Array{Any,1}:
1.0e-17
1.0e-18
1.0e-19
1.0e-20
1.0e-21
或使用使用 big(10)
创建的高精度 BigInt
类型
julia> A=[]
Any[]
julia> for i=17:21
t=1/(big(10)^(i))
push!(A,t)
end
julia> A
5-element Array{Any,1}:
9.999999999999999999999999999999999999999999999999999999999999999999999999999967e-18
9.999999999999999999999999999999999999999999999999999999999999999999999999999997e-19
9.999999999999999999999999999999999999999999999999999999999999999999999999999997e-20
1.000000000000000000000000000000000000000000000000000000000000000000000000000004e-20
9.999999999999999999999999999999999999999999999999999999999999999999999999999927e-22
您可以在此处找到更多相关讨论 https://docs.julialang.org/en/v1/manual/integers-and-floating-point-numbers/#Overflow-behavior .
例如,请注意(您可能会对不知道溢出感到惊讶):
julia> x = typemin(Int64)
-9223372036854775808
julia> x^2
0
julia> y = typemax(Int64)
9223372036854775807
julia> y^2
1
最后找到最小的正Float64
数使用:
julia> nextfloat(0.0)
5.0e-324
或
julia> eps(0.0)
5.0e-324
关于julia - 我想找到 Julia 的 0 的数字 - 我的意思是最接近 0 的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64618488/