julia - 我想找到 Julia 的 0 的数字 - 我的意思是最接近 0 的数字

标签 julia underflow

为什么 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.0Float64 值:

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/

相关文章:

julia - 如何捕获返回非零退出代码的外部程序的输出?

Julia:什么是 Julia 中的 Array 中的 undef

Julia println() 不打印/不一致的行为

MySQL 错误代码 : 1264 Out of range value for column 'count' at row 1

r - 在 R 中处理非常小的数字

C:缓冲区下溢的一个/示例是什么?

julia - 此马尔可夫链模型中鼠标的预期生命周期

dataframe - 使用 Julia StatsPlots 绘制数据帧

python - 在 Python 中处理非常非常小的数字

c++ - 整数下溢导致模数失败