python numpy机器epsilon

2024-04-26 15:09:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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类。有人能帮忙修改这个函数吗?


Tags: numpy机器returndef精度数字machinefloat
3条回答

另一个容易得到epsilon的方法是:

In [1]: 7./3 - 4./3 -1
Out[1]: 2.220446049250313e-16

正如大卫所指出的,它已经起作用了!

>>> 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

获得给定浮点类型的机器epsilon的一个更简单的方法是使用^{}

print(np.finfo(float).eps)
# 2.22044604925e-16

print(np.finfo(np.float32).eps)
# 1.19209e-07

相关问题 更多 >