[英]Python inequality comparison dealing with floating point precision
我需要比较浮点数和不等式:
if x >= y:
但是,由于浮点精度问题,有时它会在应该成功时失败( x = 0.21
和y= 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.