python中浮点数比较判断!为什么不能用==(推荐)
作者:何双新
这篇文章主要介绍了python中浮点数比较判断!为什么不能用==,本文给大家分享问题解决方法,需要的朋友可以参考下
问题:浮点数比较为什么不能用==来写?
答:计算机里面的数字是由二进制保存的,在计算机内部有些数字不能准确的保存,于是就保存了一个最靠近的数字。
计算机表示浮点数(float或double类型)都有一个精度限制,对于超出了精度限制的浮点数,计算机会把它们的精度之外的小数部分截断。
因此比较两个float是否相等,不能仅仅依靠==来判断,而是当他们的两者的差值小于一个我们可以容忍的小值时,就可以认为它们相等。
解决办法:
1、在python3.5之前,可以通过计算两个浮点数之差来判断两个浮点数是否相等:
例子1: abs(f1 - f2) <= allowed_error 可接受的误差
或:
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)
2、python 3.5之后,PEP485提案中给出了解决方案。math模块新增一个isclose函数用来判断两个浮点数的值是否接近或相等 例子2:
- 源码:
isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)
- 参数:
- a,b:两个需要比较的浮点数;
- rel_tol: 相对于输入值的大小,被认为是“接近”的最大差异;
- abs_tol: 无论输入值的大小,被认为“接近”的最大差异
- 本质算法
<strong><code> abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)</code></strong>
import math print(math.isclose(2.1,2.2,rel_tol=0.1)) # 结果:True # 同理abs_tol也可以自定义
到此这篇关于python中浮点数比较判断!为什么不能用==的文章就介绍到这了,更多相关python浮点数比较内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!