Python numpy machine epsilon
J'essaie de comprendre ce qu'est la machine epsilon. Selon Wikipedia, il peut être calculé comme suit:
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
Cependant, il ne convient que pour les nombres à double précision. Je suis intéressé à le modifier pour prendre en charge également des nombres de précision uniques. J'ai lu que numpy peut être utilisé, en particulier numpy.float32
classe. Quelqu'un peut-il aider à modifier la fonction?
62
demandé sur
Bob
2013-10-02 20:03:01
3 réponses
Un moyen plus facile d'obtenir de la machine epsilon pour un type float est d'utiliser np.finfo()
:
print(np.finfo(float).eps)
# 2.22044604925e-16
print(np.finfo(np.float32).eps)
# 1.19209e-07
121
répondu
ali_m
2015-01-07 15:59:42
Un Autre moyen facile d'obtenir epsilon est:
In [1]: 7./3 - 4./3 -1
Out[1]: 2.220446049250313e-16
66
répondu
Ullen
2015-01-06 17:08:01
Cela fonctionnera déjà, comme David l'a souligné!
>>> 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
13
répondu
Claudiu
2013-10-02 16:12:20