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?

42
demandé sur Marco Bonelli 2012-03-02 09:26:40

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
89
répondu strcat 2012-03-02 05:32:47

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.

25
répondu Ergwun 2017-05-23 12:34:24

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?).

0
répondu Sheljohn 2018-03-03 17:24:37