julia浮点比较零

julia浮点比较零,julia,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> 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中是否有检查浮点是否等于零的函数?

-1.66533e-16
不等于零。然而,它近似等于零(就特定公差而言),julia确实提供了这样一个函数:

julia> isequal(sort(abs(diag(r)))[1],convert(AbstractFloat,0.0))
false
编辑:或者正如Chris指出的那样,
atol
的一个好选择是
eps()
,它对应于特定类型的机器精度:

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

务必阅读
isapprox
的说明,以了解默认参数的含义,并了解您是否喜欢“绝对”或“相对”公差方法(或混合方法)。尽管对于与零的比较而言,使用绝对公差很好,而且可能更直观。

eps(T)
也确实有助于了解数字类型
T
@Userdijkstra的机器ε,还有二进制运算符
,使用默认参数调用
isapprox
。只想指出
eps(T)
是类型
T
的值
one(T)
的精度。对于任何类型的浮点,它都不是通用精度<例如,代码>eps(1.0)
eps(2.0)
是不同的。关键点是数组中的值打印精度较低,因此接近零的值看起来就像它们实际上是零。强制性参考:
julia> isapprox(1e-20, 0.0; atol=eps(Float64), rtol=0)
true