繁体   English   中英

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

[英]Python inequality comparison dealing with floating point precision

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

if x >= y:

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

epsilon = 0.000000001
if x >= y - epsilon:

我宁愿为此使用标准机制。 Python 有一个math.isclose function 适用于平等,但我找不到任何不平等的东西。 所以我必须写这样的东西:

import math

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

我必须在我的应用程序中经常这样做...很简单,我将创建一个function。我的问题是是否有处理不等式和浮点数的标准方法? 是否有numpy.greater_or_equal(x, y)类型 function?

由于您表示 function 调用的开销并不是真正的问题,为什么不简单地提供:

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() function,风险似乎不存在?

(或者更确切地说,将导入保留在 function 之外:)

import math


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM