Python 中 epsilon 的值

在 Python 中 epsilon 是否有标准值(或获取方法) ?我需要比较浮点数值,并希望与最小的可能差异进行比较。

在 C + + 中,有一个函数提供了 numeric_limits::epsilon( ),它为任何给定的数据类型提供 ε 值。Python 中有对应的语言吗?

113306 次浏览

该信息在 sys.float_info中可用,它对应于 C99中的 float.h。

>>> import sys
>>> sys.float_info.epsilon
2.220446049250313e-16

作为 Strcat 发布,有 sys.float_info.epsilon

但是不要忘记使用它作为浮点比较的绝对误差范围的缺陷。例如,对于大数,舍入误差可能超过 ε。

如果你认为你需要一个复习,标准的参考是大卫戈德堡的 计算机科学家应该知道的浮点数算法,或者一个简单的审查,你可以查看 浮点指南

很奇怪这里没有人提到这一点,我想很多人会用 Finfo (类型(变量))来代替。或 .resolution,如果是为了评估精度。

Note that finfo is only for floating point types, and that it also works with Python's own float type (i.e. not restricted to numpy's types). The equivalent for integer types is iinfo, though it does not contain precision information (because, well, why would it?).

如果找不到这样的函数,请记住计算机 ε 的算法非常简单(您可以使用自己喜欢的编程语言进行测试)。例如,对于蟒蛇来说:

eps = 1.0
while eps + 1 > 1:
eps /= 2
eps *= 2
print("The machine epsilon is:", eps)

对我来说,我得到了:

The machine epsilon is: 2.220446049250313e-16

以下几点对我同样适用:

>>> import math
>>> math.ulp(1.0)
2.220446049250313e-16