处理浮点精度的Python不等式比较

kyxcudwk  于 2023-01-19  发布在  Python
关注(0)|答案(1)|浏览(138)

我需要比较浮点数和不等式:

if x >= y:

但是,由于浮点精度问题,有时候应该成功的时候却失败了(x = 0.21y= 0.21000000000000002)。我想创建一个epsilon:

epsilon = 0.000000001
if x >= y - epsilon:

我宁愿使用标准的机制,Python有一个math.isclose函数可以处理等式,但是我找不到任何处理不等式的函数,所以我不得不这样写:

import math

if x > y or math.isclose(x, y):

我必须在我的应用程序中做大量的工作......很简单,我只需要创建一个函数。我的问题是,是否有一个标准的方法来处理不等式和浮点数?是否有numpy.greater_or_equal(x, y)类型的函数?

ogq8wdun

ogq8wdun1#

既然您指出函数调用的开销实际上不是问题,为什么不简单地提供:

def greater_than_or_close(x: float, y: float) -> bool:
    from math import isclose
    return x > y or isclose(x, y)

你可以在任何你需要的地方导入它。
您的评论指出:“由于令人惊讶的浮点精度问题,这看起来像是我很容易出错的函数之一”,但由于这只依赖于x实际上大于y,或者使用math.isclose()函数,因此风险似乎不存在?
(or而是将导入保持在函数之外:)

import math

def greater_than_or_close(x: float, y: float) -> bool:
    return x > y or math.isclose(x, y)

相关问题