numpy python tutorial
python numpy máquina epsilon (3)
Estoy tratando de entender qué es épsilon de máquina. Según la Wikipedia, se puede calcular de la siguiente manera:
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
Sin embargo, es adecuado solo para números de doble precisión. Estoy interesado en modificarlo para admitir también números de precisión individuales. Leí que numpy se puede usar, particularmente numpy.float32
class. ¿Alguien puede ayudar con la modificación de la función?
¡Ya funcionará, como lo señaló David!
>>> 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
Otra manera fácil de obtener épsilon es:
In [1]: 7./3 - 4./3 -1
Out[1]: 2.220446049250313e-16
Una forma más fácil de obtener el épsilon de la máquina para un tipo de flotación dado es usar np.finfo()
:
print(np.finfo(float).eps)
# 2.22044604925e-16
print(np.finfo(np.float32).eps)
# 1.19209e-07