0

有一个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。

4

3 回答 3

5

几乎 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
于 2013-02-18T01:27:03.957 回答
0

浮点数不精确。你对它们的操作越多,它们积累的不精确性就越多。有些数字可以精确表示,但大多数不能。比较它们是否相等几乎总是错误的。

于 2013-02-18T01:17:54.260 回答
0

检查浮点数是否相等是一种不好的做法。您可以在这里做的最好的事情是检查您的号码是否在所需的范围内。有关浮点如何工作的详细信息,请参阅http://en.wikipedia.org/wiki/Floating_point#Internal_representation

于 2013-02-18T01:18:38.040 回答