使用numpy中的arange()进行浮点加法时出现问题

2024-05-14 17:47:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我想测试一组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语句。你知道吗

为什么我的代码会这样,我该如何解决这个问题?你知道吗


Tags: inimportnumpyforifasnpelse
1条回答
网友
1楼 · 发布于 2024-05-14 17:47:48

看起来你已经和浮点运算不精确的事实发生了冲突。你知道吗

请参阅this question以获得一个很好的解释,为什么您会得到您想要的结果。你知道吗

对你的特殊情况的解释是,你的小数不能完全转换成二进制,所以w1,w2和w3不是你想象的那样。更一般地说:大多数实数不能用有限的位数来表示,大多数浮点运算必须有舍入。你知道吗

作为一种修复方法,不要像现在那样比较浮点值是否相等,而是改用^{}函数

np.isclose(sumw, 1.0)

相关问题 更多 >

    热门问题