Valeur pour epsilon en Python
Existe-t-il une valeur standard pour (ou une méthode pour obtenir) epsilon en Python? J'ai besoin de comparer les valeurs à virgule flottante et je veux comparer avec la plus petite différence possible.
En C++, il y a une fonction fournie numeric_limits::epsilon( )
ce qui donne la valeur epsilon pour n'importe quel type de données donné. Y a - t-il un équivalent en Python?
3 réponses
Les informations sont disponibles dans sys.float_info
, ce qui correspond à float.h en C99.
>>> import sys
>>> sys.float_info.epsilon
2.220446049250313e-16
Comme strcat posté, il existe sys.float_info.epsilon
.
Mais n'oubliez pas les pièges de l'utiliser comme une marge d'erreur absolue pour les comparaisons en virgule flottante. Par exemple, pour les grands nombres, l'erreur d'arrondi pourrait dépasser epsilon.
Si vous pensez avoir besoin d'un rappel, la référence standard est de David Goldberg ce que tout informaticien devrait savoir sur L'arithmétique à virgule flottante, ou pour un examen plus simple, vous pouvez consulter Le Guide à virgule flottante.
Surpris personne ne l'a mentionné ici; je pense que beaucoup de gens utiliseraient numpy.finfo( type(variable) ).eps à la place. Ou .resolution
s'il s'agit d'évaluer la précision.
Notez que {[1] } est uniquement pour les types à virgule flottante, et qu'il fonctionne également avec le propre type float
de Python (c'est-à-dire non limité aux types de numpy). L'équivalent pour les types entiers est iinfo
, bien qu'il ne contienne pas d'informations de précision (parce que, eh bien, pourquoi le ferait-il?).