我有以下代码片段…
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是被认为相等的值的范围。