【发布时间】:2016-01-06 13:48:44
【问题描述】:
在 Python 中比较两个浮点数时,我总是看到这样的代码来比较一个小值 epsilon,想知道选择正确 epsilon 值的最佳实践是什么?而它背后的场景又是怎样的呢?谢谢。
epsilon = 0.000001
abs(a - b)<epsilon
【问题讨论】:
-
在 python 3.5 中添加了这个:docs.python.org/3.5/library/math.html#math.isclose。根据文档,它或多或少地返回:
abs(a-b) <= max( rel_tol * max(abs(a), abs(b)), abs_tol ) -
您是否希望获得最小的 epsilon,或者您认为您希望根据您的 a 和 b 动态更改您的 epsilon?
-
请参阅stackoverflow.com/questions/6837007/… 了解一种方法。问题是针对 Java 的,但答案是通用的。
-
Python 只有一个浮点类型
float,而且在我熟悉的每个实现中,它都是 64 位 IEEE。 -
为 Python 3.5 选择的精度边界在我在另一个问题上留下的答案中。如果您有不同的感觉,我已为您提供了足够的信息以做出明智的决定。
标签: python floating-point