python:错误比较数字

时间:2017-10-29 20:43:22

标签: python

我正在从事大学项目,关于模拟常规马尔可夫链,所以我必须确认每个矩阵的向量/行和为1。

以下是代码:

nRC表示在这种情况下nRC等于3

的列数/行数
def checkingVector(vectorM):
    y = 0
    for x in range(0,nRC):
        for z in range(0,nRC):
            y += vectorM[x][z]
            print y
        if y != 1.0:
            print y
            return false
        else :
            y = 0
    return true

validMatrix = checkingVector(m)
if validMatrix == false:
    print "Invalid Matrix"
    print m
else:
    equationA = []
    for x in range(0,nRC):
        equationA.append(1)
    equationA.append(0)
    print equationA
    print m

这样做效果很好,但是这个矩阵失败了

(0.6 0.3 0.1)
(0.2 0.5 0.3)
(0.1 0.2 0.7)

因此,此矩阵的每一行都等于1,当我将函数应用于此矩阵时,它返回无效矩阵。

我已经打印了y变量以确保它包含1并且它确实存在,但程序仍然是函数的连续性。

我做错了什么,如何解决?

1 个答案:

答案 0 :(得分:0)

您是Floating Point Arithmetic: Issues and Limitations

的受害者
In [1]: 0.6 + 0.3 + 0.1
Out[1]: 0.9999999999999999

浮点数不准确。因此,永远不要测试平等,而是测试

之类的东西
if abs(y-1) <= 0.0000001:
    # close enough

或使用decimal module