在 Python 中比较浮点数是否相等的最佳方法是什么?

新手上路,请多包涵

众所周知,由于舍入和精度问题,比较浮点数是否相等有点繁琐。

例如: https ://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/

在 Python 中处理这个问题的推荐方法是什么?

这个地方有标准库函数吗?

原文由 Gordon Wrigley 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 740
2 个回答

Python 3.5 添加了 math.isclosecmath.isclose 函数,如 PEP 485 中所述。

如果您使用的是早期版本的 Python, 文档 中提供了等效功能。

 def isclose(a, b, rel_tol=1e-09, abs_tol=0.0):
    return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)

rel_tol 是相对容差,乘以两个参数中较大的一个;随着值变大,它们之间的允许差异也会变大,同时仍然认为它们相等。

abs_tol 是在所有情况下按原样应用的绝对公差。如果差值小于这些容差中的任何一个,则认为这些值相等。

原文由 Mark Ransom 发布,翻译遵循 CC BY-SA 3.0 许可协议

像下面这样简单的东西可能就足够了:

 return abs(f1 - f2) <= allowed_error

原文由 Andrew White 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题