jueves, 18 de junio de 2020

Igualdad en Decimales

Si se evalúa la igualdad de números decimales en Python, se puede encontrar con diferencias como:
(0.1 + 0.1 + 0.1) == 0.3  --> False

Esto pasa porque algunos decimales no pueden ser representados en formato binario, es decir en base 2.
Varias soluciones simples pueden implementarse según el escenario, como usar la función round.
Una forma más general es usar la función isclose de la librería math que usa los parámetros de tolerancia abs_tol y rel_tol.

Para documentación de la librería math, ver Referencia No.1, y el PEP-485 en la Referencia No.2

script:
import math
a = 0.1 + 0.1 + 0.1
b = 0.3
print(math.isclose(a, b, abs_tol=0.0001, rel_tol=0.0001))
#True

a = 99999999.01
b = 99999999.02
print(math.isclose(a, b, abs_tol=0.0001, rel_tol=0.0001))
#True

a = 0.01
b = 0.02
print(math.isclose(a, b, abs_tol=0.0001, rel_tol=0.0001))
#False



No hay comentarios:

Publicar un comentario