76

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

在 C++ 中,提供了一个函数,numeric_limits::epsilon( )它为任何给定的数据类型提供 epsilon 值。Python中是否有等价物?

4

4 回答 4

139

信息可在 中找到sys.float_info,对应于 C99 中的 float.h。

>>> import sys
>>> sys.float_info.epsilon
2.220446049250313e-16
于 2012-03-02T05:32:47.830 回答
35

正如strcat 发布的那样,有sys.float_info.epsilon.

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

如果您认为需要复习,标准参考是 David Goldberg 的What Every Computer Scientist Should Know About Floating-Point Arithmetic,或者为了更简单的评论,您可以查看The Floating Point Guide

于 2012-03-02T05:51:21.603 回答
9

如果您找不到执行此操作的函数,请记住计算机器 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

于 2019-08-20T18:10:25.180 回答
6

很惊讶没有人在这里提到这一点;我想很多人会改用numpy.finfo( type(variable) ).eps。或者.resolution如果是评估精度。

请注意,这finfo仅适用于浮点类型,并且它也适用于 Python 自己的float类型(即不限于 numpy 的类型)。整数类型的等价物是iinfo,尽管它不包含精度信息(因为,好吧,为什么会这样?)。

于 2018-03-02T18:46:51.700 回答