Python 中的 epsilon 是否有标准值(或获取方法)?我需要比较浮点值并希望与可能的最小差异进行比较。
在 C++ 中,提供了一个函数,numeric_limits::epsilon( )
它为任何给定的数据类型提供 epsilon 值。Python中是否有等价物?
Python 中的 epsilon 是否有标准值(或获取方法)?我需要比较浮点值并希望与可能的最小差异进行比较。
在 C++ 中,提供了一个函数,numeric_limits::epsilon( )
它为任何给定的数据类型提供 epsilon 值。Python中是否有等价物?
信息可在 中找到sys.float_info
,对应于 C99 中的 float.h。
>>> import sys
>>> sys.float_info.epsilon
2.220446049250313e-16
正如strcat 发布的那样,有sys.float_info.epsilon
.
但是不要忘记使用它作为浮点比较的绝对误差范围的陷阱。例如,对于大数,舍入误差可能会超过 epsilon。
如果您认为需要复习,标准参考是 David Goldberg 的What Every Computer Scientist Should Know About Floating-Point Arithmetic,或者为了更简单的评论,您可以查看The Floating Point Guide。
如果您找不到执行此操作的函数,请记住计算机器 epsilon 的算法非常简单(您可以使用您喜欢的编程语言进行测试)。例如,对于 python:
eps = 1.0
while eps + 1 > 1:
eps /= 2
eps *= 2
print("The machine epsilon is:", eps)
就我而言,我得到了:
The machine epsilon is: 2.220446049250313e-16
很惊讶没有人在这里提到这一点;我想很多人会改用numpy.finfo( type(variable) ).eps。或者.resolution
如果是评估精度。
请注意,这finfo
仅适用于浮点类型,并且它也适用于 Python 自己的float
类型(即不限于 numpy 的类型)。整数类型的等价物是iinfo
,尽管它不包含精度信息(因为,好吧,为什么会这样?)。