python - 在 Python 中比较 float 是否相等的最佳方法是什么?

标签 python floating-point

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

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

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

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

最佳答案

Python 3.5 添加了 math.isclose and cmath.isclose functionsPEP 485 中所述.

如果您使用的是较早版本的 Python,documentation 中给出了等效函数。 .

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 是在所有情况下按原样应用的绝对公差。如果差值小于这些公差中的任何一个,则认为这些值相等。

关于python - 在 Python 中比较 float 是否相等的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5595425/

相关文章:

python - 与倒数第二个相比,最后一个索引对 numpy 数组的访问时间的影响更大

c - 为什么转换 (unsigned long long)DBL_MAX(或 FLT_MAX)也会导致 FE_INEXACT 升高?

python - 防止 f 字符串将 float 转换为科学记数法

floating-point - 使用 flocq 定义 float 和证明

python - Matplotlib 自定义图例以显示正方形而不是矩形

python - 登录 linkedin

python - 如何在 tf.while_loop 中使用 tf.scatter_update

python - 无法使用 cv2.VideoCapture(video_path).set(cv2.CAP_PROP_FPS, new_frame_rate) 更改输入视频的帧速率

java - Java中的Double到底是什么意思?

.net - CLR JIT 优化违反了因果关系?