tho*_*ate 52 python floating-point comparison epsilon
在Python中是否有(或获取方法)epsilon的标准值?我需要比较浮点值,并希望与最小的可能差异进行比较.
在C++中numeric_limits::epsilon( ),提供了一个函数,它为任何给定的数据类型提供epsilon值.Python中有相应的东西吗?
str*_*cat 104
该信息可用sys.float_info,对应于C99中的float.h.
>>> import sys
>>> sys.float_info.epsilon
2.220446049250313e-16
Run Code Online (Sandbox Code Playgroud)
Erg*_*wun 30
随着strcat发布,有sys.float_info.epsilon.
但是不要忘记将它用作浮点比较的绝对误差范围的缺陷.例如,对于大数字,舍入误差可能超过epsilon.
如果您认为需要复习,标准参考文献是David Goldberg的"每个计算机科学家应该知道的关于浮点算术的内容",或者为了更简单的回顾,您可以查看"浮点指南".
如果你找不到一个函数来做到这一点,请记住计算机器 epsilon 的算法非常简单(你可以用你最喜欢的编程语言进行测试)。例如,对于 python:
eps = 1.0
while eps + 1 > 1:
eps /= 2
eps *= 2
print("The machine epsilon is:", eps)
Run Code Online (Sandbox Code Playgroud)
就我而言,我得到了:
The machine epsilon is: 2.220446049250313e-16
令人惊讶的是这里没有人提到这一点;我想很多人会使用numpy.finfo( type(variable) ).eps来代替。或者.resolution如果是评估精度。
请注意,这finfo仅适用于浮点类型,并且它也适用于 Python 自己的float类型(即不限于 numpy 的类型)。整数类型的等价物是iinfo,尽管它不包含精度信息(因为,好吧,为什么会这样?)。
以下内容也对我有用:
>>> import math
>>> math.ulp(1.0)
2.220446049250313e-16
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55279 次 |
| 最近记录: |