Python 和与常数相等的比较

Python 和与常数相等的比较,python,debugging,numpy,Python,Debugging,Numpy,我有以下代码片段 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 。。。我不知道为什么。如果有人能提供一些指导,我将不胜感激。如果需要更多信息

我有以下代码片段

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.000000000001的值,print将其舍入。

(无法从示例中确定。)

一些浮点实现在最低位创建舍入,打印时并不总是显示舍入。因此,您从float(e0+e1)中实际得到的可能是类似于1.000000000001的值,print将其舍入。

(无法从示例中确定。)

一些浮点实现在最低位创建舍入,打印时并不总是显示舍入。因此,您从float(e0+e1)中实际得到的可能是类似于1.000000000001的值,print将其舍入。

(无法从示例中确定。)

一些浮点实现在最低位创建舍入,打印时并不总是显示舍入。因此,您从float(e0+e1)中实际得到的可能是类似于1.000000000001的值,print将其舍入。

(无法从样本中确定。)

要比较浮点数,请始终测试可接受值的范围,而不是直接比较是否相等。因此,对于您的断言,请尝试以下方法:

assert( abs(float(elem[0]+elem[1])-1.0) < 0.00005)
assert(abs(浮动(元素[0]+元素[1])-1.0)<0.00005)

其中,0.00005是被视为等效的值范围。

要比较浮点数,请始终测试可接受值的范围,而不是直接比较是否相等。因此,对于您的断言,请尝试以下方法:

assert( abs(float(elem[0]+elem[1])-1.0) < 0.00005)
assert(abs(浮动(元素[0]+元素[1])-1.0)<0.00005)

其中,0.00005是被视为等效的值范围。

要比较浮点数,请始终测试可接受值的范围,而不是直接比较是否相等。因此,对于您的断言,请尝试以下方法:

assert( abs(float(elem[0]+elem[1])-1.0) < 0.00005)
assert(abs(浮动(元素[0]+元素[1])-1.0)<0.00005)

其中,0.00005是被视为等效的值范围。

要比较浮点数,请始终测试可接受值的范围,而不是直接比较是否相等。因此,对于您的断言,请尝试以下方法:

assert( abs(float(elem[0]+elem[1])-1.0) < 0.00005)
assert(abs(浮动(元素[0]+元素[1])-1.0)<0.00005)

其中,0.00005是被视为等效的值范围。

元素[0]和元素[1]的值分别是什么?请执行
打印报告(浮动(元素[0]+元素[1])
,看看这是否说明问题。您在编辑中显示的值是错误的。如果您只打印一个浮点值,您将得到四舍五入的结果。正如我之前所说,您需要打印号码的
repr
。不。我不知道你为什么认为是这样,但这不是我观察到的行为。你是说
print str(elem[0])、repr(elem[0])
打印两个相同的数字?elem[0]和elem[1]的值分别是多少?做
print repr(float(elem[0]+elem[1])
,看看这是否说明问题。您在编辑中显示的值是错误的。如果您只打印一个浮点值,您将得到四舍五入的结果。正如我之前所说,您需要打印号码的
repr
。不。我不知道你为什么认为是这样,但这不是我观察到的行为。你是说
print str(elem[0])、repr(elem[0])
打印两个相同的数字?elem[0]和elem[1]的值分别是多少?做
print repr(float(elem[0]+elem[1])
,看看这是否说明问题。您在编辑中显示的值是错误的。如果您只打印一个浮点值,您将得到四舍五入的结果。正如我之前所说,您需要打印号码的
repr
。不。我不知道你为什么认为是这样,但这不是我观察到的行为。你是说
print str(elem[0])、repr(elem[0])
打印两个相同的数字?elem[0]和elem[1]的值分别是多少?做
print repr(float(elem[0]+elem[1])
,看看这是否说明问题。您在编辑中显示的值是错误的。如果您只打印一个浮点值,您将得到四舍五入的结果。正如我之前所说,您需要打印号码的
repr
。不。我不知道你为什么认为是这样,但这不是我观察到的行为。你是说
print str(elem[0])、repr(elem[0])
打印两个相同的数字吗?