使用 numpy 中的 arange() 进行浮点数加法时遇到问题

Trouble with float addition using arange() from numpy

我想测试一组 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 以了解为什么您会得到这样的结果。

quick 对您的特殊情况的解释是,您的小数不能精确转换为二进制,因此 w1、w2 和 w3 与您认为的不完全相同。更一般地说:大多数实数不能用有限位数表示,大多数浮点运算必须四舍五入。

作为解决方法,不要像现在这样比较浮点数是否相等,而是使用 np.isclose 函数

np.isclose(sumw, 1.0)