你能帮我解决这个问题吗?在
在代码:-在
import numpy as np
def test(numList):
yesList=[]
for num in numList:
print num, "start here"
for i in np.arange(2.0,3.0,0.1):
print i
if num==i: yesList.append(num)
return yesList
print test([2.1,2.3,3.0])
在输出:-在
^{pr2}$我希望它打印[2.1,2.3]
,但它只给了我[2.1]
,如图所示。在
简而言之,您使用的是浮点数(不精确)并期望得到精确的结果,但最终会失败。冗长的答案要复杂得多,但是首先看一下this site's floating-point FAQ:Is floating point math broken?中的第一项(这是一个JavaScript问题,但它同样适用于所有语言)
它还取决于在python中循环变量是如何递增的。。。 循环的(i+1)-th值可以是
或者
^{pr2}$在浮点中,这些值将不同…
因此,如果要处理严格的浮点相等,就必须了解这种细节
而且,很难控制循环何时停止。。。最后一个值很可能是(3.0-epsilon)
第一条规则是无论使用哪种语言,都不要在浮点上使用循环
改用整数:
还要注意,i*0.1和i/10.0可能不同,因为浮点0.1并不完全是1/10…
所以,如果你写if num==(i*0.1),它不会像你期望的那样工作…
例如(23*0.1)==(23/10.0)为假,虽然最后一个恰好严格等于浮点2.3,但它们都不同于数学分数23/10。在
第二条规则告诉我们不要在float上使用严格的相等,这很少是你所想的
请阅读“每一位计算机科学家应该知道的浮点运算。”http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
相关问题 更多 >
编程相关推荐