比较和和常数的相等性



我有以下代码片段…

try:
    assert(float(elem[0]+elem[1])==1.0)
except AssertionError:
    print float(elem[0]+elem[1]), elem[0]+elem[1]

…其中elem是一个包含两个元素的numpy数组(elem[0]和elem[1]的类型为numpy.float64)。对于我的数组,上面的代码总是输出…

1.0, 1.0

…我不知道为什么。如果有人能提供一些指导,我会很感激的。如果需要更多的信息,请告诉我。

编辑:

elem[0]的值为0.168270720826,elem[1]的值为0.831729279174

一些浮点实现在最低有效位上创建舍入,这些位在打印时并不总是显示。所以你真正从float(e0+e1)中得到的可能是类似于1.00000000001的东西,而print是将其舍入。
(从样本中无法确定)

要比较浮点数,总是测试可接受值的范围,而不是直接比较是否相等。所以对于你的断言,试着这样做:

assert( abs(float(elem[0]+elem[1])-1.0) < 0.00005)

其中0.00005是被认为相等的值的范围。

最新更新