Python中epsilon的值

时间:2012-03-02 05:26:40

标签: python comparison floating-point epsilon

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

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

4 个答案:

答案 0 :(得分:99)

该信息在sys.float_info中提供,对应于C99中的float.h。

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

答案 1 :(得分:26)

作为strcat posted,有sys.float_info.epsilon

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

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

答案 2 :(得分:2)

这里没有人提到这个;我想很多人会使用numpy.finfo( type(variable) ).eps代替。或.resolution,如果要评估精确度。

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

答案 3 :(得分:2)

如果找不到能做到这一点的函数,请记住计算机器精度的算法非常简单(可以使用自己喜欢的编程语言进行测试),例如python:

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

就我而言,我得到了:

The machine precision is: 2.220446049250313e-16