python numpy машина 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
класса. Может ли кто - нибудь помочь с изменением функции?
3 ответов
более простой способ получить машину epsilon для данного типа float-использовать np.finfo()
:
print(np.finfo(float).eps)
# 2.22044604925e-16
print(np.finfo(np.float32).eps)
# 1.19209e-07
Он уже будет работать, как отметил Дэвид!
>>> 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