Python中的epsilon(或获取方法)是否有标准值?我需要比较浮点值,并想与可能的最小差异进行比较。
在C ++中numeric_limits::epsilon( )
,提供了一个函数,该函数给出任何给定数据类型的epsilon值。Python中是否有等效功能?
Python中的epsilon(或获取方法)是否有标准值?我需要比较浮点值,并想与可能的最小差异进行比较。
在C ++中numeric_limits::epsilon( )
,提供了一个函数,该函数给出任何给定数据类型的epsilon值。Python中是否有等效功能?
1e300-(1e300-1e200)
return 0.0
,其中实际差异必须为10 ^ 200。
Answers:
该信息在中提供,该信息sys.float_info
与C99中的float.h相对应。
>>> import sys
>>> sys.float_info.epsilon
2.220446049250313e-16
由于strcat的发布,有sys.float_info.epsilon
。
但是,不要忘记将其用作浮点比较的绝对误差范围的陷阱。例如,对于大数,舍入误差可能超过epsilon。
如果您认为需要复习,则标准参考文献是David Goldberg的《每位计算机科学家应该知道的有关浮点算法的知识》,或者,如果要进行更简单的审查,可以查看《浮点指南》。
惊讶的是这里没有人提到这件事;我认为许多人会改用numpy.finfo(type(variable)).eps。还是.resolution
要评估精度。
请注意,这finfo
仅适用于浮点类型,并且还适用于Python自己的float
类型(即不限于numpy的类型)。整数类型的等效项是iinfo
,尽管它不包含精度信息(因为,为什么会这样?)。
float
,使用sys.float_info
; 仅仅为此使用NumPy会很奇怪。如果你的价值观后NumPy的类型(np.float32
,np.float64
,等),然后使用numpy.finfo
。
np.finfo(float)
它确实可以工作,但是我同意,如果您从不使用numpy,那么仅为此安装软件包就太过头了。