Python中epsilon的值

Python中epsilon的值,python,comparison,floating-point,epsilon,Python,Comparison,Floating Point,Epsilon,Python中是否有epsilon的标准值(或获取epsilon的方法)?我需要比较浮点值,并希望与尽可能小的差异进行比较 在C++中,函数提供了 >代码>数值限制::ε()/代码> < /强>,它给出了给定数据类型的ε值。Python中是否有一个等价物?中提供了该信息,它对应于C99中的float.h >>> import sys >>> sys.float_info.epsilon 2.220446049250313e-16 例如,有sys.float\

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


<>在C++中,函数提供了<强> >代码>数值限制::ε()/代码> < /强>,它给出了给定数据类型的ε值。Python中是否有一个等价物?

中提供了该信息,它对应于C99中的float.h

>>> import sys
>>> sys.float_info.epsilon
2.220446049250313e-16
例如,有
sys.float\u info.epsilon

但不要忘记将其用作浮点比较的绝对误差容限的缺点。例如,对于大数字,舍入误差可能超过ε


如果您认为需要复习,标准参考是David Goldberg的,或者您可以查看更简单的复习。

令人惊讶的是,这里没有人提到这一点;我想很多人会用它来代替。或
.resolution
,如果要评估精度


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

如果您找不到一个函数来实现这一点,请记住,计算机器ε的算法非常简单(您可以使用您最喜欢的编程语言进行测试)。例如,对于python:

eps = 1.0
while eps + 1 > 1:
    eps /= 2
eps *= 2
print("The machine epsilon is:", eps)
就我而言,我得到了:


<代码>机器ε是:2.2204604250313E-16<<代码> /P>当比较浮点时,值的大小将影响ε,也考虑值中的错误可以跨操作传播。“数值分析”领域致力于这方面的研究。该网站还提供了一些值得遵循的好规则。作为上面人们评论的一个例子,

1e300-(1e300-1e200)
return
0.0
,其中实际差异必须是10^200。对“大多数人”不同意:不是每个人都使用NumPy。如果您想要Python的
float
的epsilon,请使用
sys.float_info
;仅仅为了这个而使用NumPy是很奇怪的。如果要查找NumPy类型的值(
np.float32
np.float64
,等等),请使用
NumPy.finfo
。更改措辞。不过要澄清的是,
np.finfo(float)
确实有效,但我同意,如果您从未使用过numpy,那么仅为此安装软件包就太过了。对,但是
np.finfo(float)
有点误导,因为numpy将
float
转换为
np.float64
,然后报告相关细节。因此,它再次报告了NumPy类型,而不是Python的
float
。(尽管不可否认,
float
np.float64
极有可能是相同的格式:它们都在引擎盖下使用C双精度。)生成eps的好方法,但为什么称之为机器精度?@gfdsal:谢谢,我认为机器ε应该是确切的术语。