首页 > 后端开发 > Python教程 > 如何在 Python 中可靠地比较浮点数是否相等?

如何在 Python 中可靠地比较浮点数是否相等?

Patricia Arquette
发布: 2024-12-18 11:49:10
原创
433 人浏览过

How Can I Reliably Compare Floating-Point Numbers for Equality in Python?

Python 中的近似浮点相等:标准库函数来救援

人们普遍认为,比较浮点是否精确相等可能会出现问题,因为由于浮点精度限制,简单的相等性检查变得不可靠。我们如何在 Python 中克服这一挑战?

Python 的内置解决方案

Python 3.5 版本为此引入了两个基本函数:math.isclose 和 cmath.isclose 。这些函数(如 PEP 485 中所定义)可以对浮点数进行稳健比较,同时考虑与精度相关的差异。

isclose 函数

isclose 函数采用三个参数:

  • a 和 b:要浮点数比较
  • rel_tol(可选):相对容差阈值
  • abs_tol(可选):绝对容差阈值

rel_tol 表示相对于允许的偏差百分比a 和 b 的大小。另一方面,abs_tol 是一个无论大小都必须满足的绝对阈值。

容差注意事项

该函数比较 a 和 b 之间的绝对差rel_tol * max(|a|, |b|) 和 abs_tol。如果差异小于这些值中的任何一个,则浮点数被视为相等。

早期 Python 版本的等效实现

对于 3.5 之前的 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)
登录后复制

利用此函数可以让您自信地比较浮点数是否近似相等,在 Python 中处理数值数据时这是非常宝贵的工具。

以上是如何在 Python 中可靠地比较浮点数是否相等?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板