Valor para epsilon en Python


¿Hay un valor estándar para (o método para obtener) epsilon en Python? Necesito comparar valores de coma flotante y quiero comparar con la diferencia más pequeña posible.

En C++ hay una función proporcionada numeric_limits::epsilon( ) que da el valor epsilon para cualquier tipo de datos dado. Hay un equivalente en Python?

Author: Marco Bonelli, 2012-03-02

3 answers

La información está disponible en sys.float_info, que corresponde a flotar.h en C99.

>>> import sys
>>> sys.float_info.epsilon
2.220446049250313e-16
 89
Author: strcat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-02 05:32:47

Como strcat publicó , hay sys.float_info.epsilon.

Pero no olvide las trampas de usarlo como un margen de error absoluto para comparaciones en coma flotante. Por ejemplo, para números grandes, el error de redondeo podría exceder a epsilon.

Si usted piensa que necesita un repaso, la referencia estándar es David Goldberg Lo que Todo Científico de la Computación Debe Saber Acerca de la Aritmética de Coma Flotante, o para una revisión más simple puede consultar La Guía de Coma Flotante.

 25
Author: Ergwun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:24

Sorprendido nadie mencionó esto aquí; creo que mucha gente usaría numpy.finfo (tipo (variable)).eps en su lugar. O .resolution si se trata de evaluar la precisión.

Tenga en cuenta que finfo es solo para tipos de coma flotante, y que también funciona con el propio tipo float de Python (es decir, no restringido a los tipos de numpy). El equivalente para los tipos enteros es iinfo, aunque no contiene información de precisión (porque, bueno, ¿por qué lo haría?).

 0
Author: Sheljohn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-03 17:24:37