现实浮动值为"约零"

时间:2015-01-19 23:22:10

标签: python numpy floating-point-precision

我正在开发一个具有相当复杂的数字的程序,主要是在具有复杂数据类型的numpy中。一些计算返回几乎为空的数组,复杂的组件几乎为零。例如:

(2 + 0j, 3+0j, 4+3.9320340202e-16j)

显然第三个组件基本上是0,但无论出于何种原因,这是我的计算结果,结果发现,对于其中一些几乎为零的值,np.is_complex()返回True。我认为仅应用截止值是明智的,而不是挖掘那些大代码。我的问题是,什么是合理的截止点,以下任何东西都应该被视为零? 0.00? 0.000000?等...

据我所知,这些值是由浮点数学中的舍入误差引起的,只是想明智地处理它们。允许这种精度误差的公差/范围是多少?我想将它设置为参数:

ABOUTZERO=0.000001

1 个答案:

答案 0 :(得分:1)

正如其他人评论的那样,构成“几乎为零”的内容确实取决于您的特定应用,以及您对舍入错误的预期程度。

如果必须使用硬阈值,则合理的值可能是machine epsilon,它被定义为由于浮点运算的舍入而导致的相对误差的上限。直观地,它是最小的正数,当添加到1.0时,使用给定的浮点表示和舍入方法给出结果> 1.0。

在numpy中,您可以使用np.finfo获取特定浮点类型的机器epsilon:

import numpy as np

print(np.finfo(float).eps)
# 2.22044604925e-16
print(np.finfo(np.float32).eps)
# 1.19209e-07