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