pythonnumpy机epsilon

我想了解什么是机器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类。 任何人都可以帮助修改该function?

获取给定floattypes的机器epsilon的更简单方法是使用np.finfo()

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

另一个简单的方法来获得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