Comparar números flotantes puede ser engorroso por las imprecisiones que implican la representación de los números decimales. Esto debido a que este tipo de números se almacenan en la memoria del computador usando una representación binaria, complicando los resultados debido al redondeo.
#Dan diferente precisión decimal
x = 3.3
print(x)
y = 1.1 + 2.2 #por la referencia de memoria tiene cierta precisión decimal
print(y)
#como la precisión es diferente no son exactamente iguales
print(x==y)
Por esto, se pueden trabajar dos maneras para hacer la comparación:
- Es brusca y se hace a partir de strings. Se transforma y en formato string y se cortan los valores extra de precisión:
y_str = format(y,".2g") #Parámetros: (variable, "#decimales")
print('str ->', y_str)
print(y_str == str(x)) #Para hacer la comparación con la equis se tiene que volver str también
- Es la forma matemática.
print("*" * 10) #Solo es una línea divisoria.
print(y, x)
#matemáticamente son iguales, entonces se puede resolver con tolerancia
tolerance = 0.00001
#se saca el valor absoluto con abs() ya que se necesita que sea positivo.
print(abs(x-y)<tolerance)
Curso de Fundamentos de Python
0 Comentarios
para escribir tu comentario