朱莉娅浮点数比较为零

时间:2017-07-06 21:19:05

标签: julia

julia> r
3×3 Array{Float64,2}:
 -1.77951  -0.79521   -2.57472
  0.0       0.630793   0.630793
  0.0       0.0       -1.66533e-16

julia> sort(abs(diag(r)))[1]
1.6653345369377348e-16

julia> isequal(floor(sort(abs(diag(r)))[1]),0)
true

但这不对

julia> isequal(sort(abs(diag(r)))[1],convert(AbstractFloat,0.0))
false

Julia中是否有一个函数来检查等于零的浮点数?

1 个答案:

答案 0 :(得分:5)

-1.66533e-16 等于零。然而,大约等于零(相对于特定的公差),而julia确实提供了这样的功能:

isapprox(1e-16, 0.0; atol=1e-15, rtol=0)

编辑或正如Chris指出的那样,atol的一个不错的选择是eps(),它对应于该特定类型的机器精度:

julia> isapprox(1e-20, 0.0; atol=eps(Float64), rtol=0)
true

请阅读isapprox的说明,了解默认参数的含义,并了解您是否更喜欢“绝对”或“相对”容差方法(或混合方法)。虽然具体来说与零相比,使用绝对容差很好,可能更直观。