有一个python代码如下:
import sys
import fileinput, string
K = 3
f = raw_input("please input the initial "+str(K)+" lamba: ").split()
Z = []
sumoflamba = 0.0
for m in f:
j = m.find("/")
if j!=-1:
e=float(m[:j])/float(m[j+1:])
else:
e = float(m)
sumoflamba+=e
if e==0:
print "the initial lamba cannot be zero!"
sys.exit()
Z.append(e)
print sumoflamba
if sumoflamba!=1:
print "initial lamba must be summed to 1!"
sys.exit()
当我用0.7,0.2,0.1运行时。它会打印警告并退出!但是,当我用0.1,0.2,0.7运行时。它工作正常。 0.3,0.3,0.4工作正常。我没有线索......有人可以解释一下吗? 对于所有这些案例,“print sumoflamda”将给出1.0。
答案 0 :(得分:4)
Lattyware提供的链接解释了 - 但简而言之,您不能指望相等比较在浮点工作而不明确精度。如果您要将值四舍五入或将其转换为整数,您将获得可预测的结果
>>> f1 = 0.7 + 0.2 + 0.1
>>> f2 = 0.1 + 0.2 + 0.7
>>> f1 == f2
False
>>> round(f1,2) == round(f2,2)
True
答案 1 :(得分:0)
花车不精确。使用它们越多,它们累积的不精确度就越高。有些数字可以准确表示,但大多数都不能。比较他们的平等几乎总是一个错误。
答案 2 :(得分:0)
检查浮点数是否相等是一种不好的做法。你在这里做的最好是检查你的号码在所需的范围内。有关浮点如何工作的详细信息,请参阅http://en.wikipedia.org/wiki/Floating_point#Internal_representation