Python中不一致的浮点值

Python中不一致的浮点值,python,floating-point-precision,Python,Floating Point Precision,我正试图为可见线问题创建一个程序(某种简化的二维隐藏面移除,但这与问题无关) 我面临的问题是,我的程序的不同部分正在为理想情况下应该相同的场景生成不同的浮点值 例如,如果我计算两条直线的交点: L1 : y = -92412.89517023x + -27156.376502560393 L2 : y = 75611.15200259097x + 90038.63242234234 我明白了 (-0.6974895016328344, 37300.64769417069). 但是,当我单独计

我正试图为可见线问题创建一个程序(某种简化的二维隐藏面移除,但这与问题无关)

我面临的问题是,我的程序的不同部分正在为理想情况下应该相同的场景生成不同的浮点值

例如,如果我计算两条直线的交点:

L1 : y = -92412.89517023x + -27156.376502560393
L2 : y = 75611.15200259097x + 90038.63242234234
我明白了

(-0.6974895016328344, 37300.64769417069).
但是,当我单独计算这些线的y值时 在x=-0.6974895016328344,我得到 37300.64769417069和37300.64769417068(请注意最后一位的差异)

因为我接着用这些不同的坐标进行比较,所以我得到了错误的答案(因为从逻辑上来说,两者应该是相同的,但代码实际上以不同的值结束)

我怎样才能解决这个问题

下面是我对上述函数的代码(对于y=mx+c,行表示为[m,c])

对于交叉口:

def intersection(line1, line2):
    [line1, line2] = sorted([line1, line2])
    if line1[0] == line2[0]:
        print("INVALID")
    m1, c1, m2, c2 = line1[0], line1[1], line2[0], line2[1]

    x = (c2 - c1) / (m1 - m2)
    y = (m2 * c1 - m1 * c2) / (m2 - m1)
    print('interstection', line1, line2, x, y)
    return [x, y]
从x坐标获取直线的y坐标:

def gety(x, line):
    return line[0] * x + line[1]

由于浮点数在内存中的存储方式,浮点数可能与预期的不同

>>> 0.1 + 0.2
0.30000000000000004
因此,您应该在不允许出错的情况下删除它们

>>> a = 0.1 + 0.2      # 0.30000000000000004
>>> a == 0.3
False
最好采取以下措施:

>>> epsilon = 1e-9
>>> abs(a - 0.3) <= epsilon
True
ε=1e-9
>>>abs(a-0.3)在比较浮点数之前检查此处:另请参见和。