Python中是否有(或获取方法)epsilon的标准值?我需要比较浮点值,并希望与最小的可能差异进行比较。
在C ++中,提供了一个函数 numeric_limits::epsilon( )
,它为任何给定的数据类型提供epsilon值。 Python中是否有等价物?
答案 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