首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python numpy机器epsilon

python numpy机器epsilon
EN

Stack Overflow用户
提问于 2013-10-03 00:03:02
回答 3查看 153.2K关注 0票数 127

我正在尝试理解什么是机器epsilon。根据维基百科,它可以计算如下:

代码语言:javascript
复制
def machineEpsilon(func=float):
    machine_epsilon = func(1)
    while func(1)+func(machine_epsilon) != func(1):
        machine_epsilon_last = machine_epsilon
        machine_epsilon = func(machine_epsilon) / func(2)
    return machine_epsilon_last

但是,它只适用于双精度数字。我有兴趣修改它,以支持也单精度数字。我读到可以使用numpy,特别是numpy.float32类。有人可以帮助修改函数吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-03 00:16:28

获取给定浮点类型的机器epsilon的一种更简单的方法是使用np.finfo()

代码语言:javascript
复制
print(np.finfo(float).eps)
# 2.22044604925e-16

print(np.finfo(np.float32).eps)
# 1.19209e-07
票数 231
EN

Stack Overflow用户

发布于 2014-08-06 16:24:54

获取epsilon的另一种简单方法是:

代码语言:javascript
复制
In [1]: 7./3 - 4./3 -1
Out[1]: 2.220446049250313e-16
票数 104
EN

Stack Overflow用户

发布于 2013-10-03 00:12:20

正如David指出的那样,它已经可以工作了!

代码语言:javascript
复制
>>> def machineEpsilon(func=float):
...     machine_epsilon = func(1)
...     while func(1)+func(machine_epsilon) != func(1):
...         machine_epsilon_last = machine_epsilon
...         machine_epsilon = func(machine_epsilon) / func(2)
...     return machine_epsilon_last
... 
>>> machineEpsilon(float)
2.220446049250313e-16
>>> import numpy
>>> machineEpsilon(numpy.float64)
2.2204460492503131e-16
>>> machineEpsilon(numpy.float32)
1.1920929e-07
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19141432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档