我想测试一组3个变量w1,w2,w3
。当它们的和等于1时,我想打印"YATTA"
。你知道吗
import numpy as np
for w1 in np.arange(0.10,0.45,0.05):
for w2 in np.arange(0.10,0.45,0.05):
for w3 in np.arange(0.10,0.45,0.05):
sumw=w1+w2+w3
if(sumw==1.0):
print "YATTA"
else:
print w1,w2,w3,sumw
当我运行这个我观察到一些非常奇怪的东西!例如,当我的变量是:
w1 = 0.2
w2 = 0.4
w3 = 0.4
sumw
是1.0但是它不打印"YATTA"
,而是执行else
语句。你知道吗
为什么我的代码会这样,我该如何解决这个问题?你知道吗
看起来你已经和浮点运算不精确的事实发生了冲突。你知道吗
请参阅this question以获得一个很好的解释,为什么您会得到您想要的结果。你知道吗
对你的特殊情况的解释是,你的小数不能完全转换成二进制,所以w1,w2和w3不是你想象的那样。更一般地说:大多数实数不能用有限的位数来表示,大多数浮点运算必须有舍入。你知道吗
作为一种修复方法,不要像现在那样比较浮点值是否相等,而是改用^{} 函数
相关问题 更多 >
编程相关推荐