Saltar al contenido

Error de redondeo de Python con números flotantes

Solución:

Cualquier número que no se pueda construir a partir de potencias exactas de dos no se puede representar exactamente como un número de coma flotante; necesita ser aproximado. A veces, la aproximación más cercana será menor que el número real.

Lea lo que todo informático debería saber sobre la aritmética de coma flotante.

Es muy conocido debido a la naturaleza de los números de coma flotante.

Si desea hacer aritmética decimal, no aritmética de punto flotante, existen bibliotecas para hacer esto.

P.ej,

>>> from decimal import Decimal
>>> Decimal(29)/Decimal(100)
Decimal('0.29')
>>> Decimal('0.29')*100
Decimal('29')
>>> int(Decimal('29'))
29

En general, el decimal probablemente se exceda y aún tendrá errores de redondeo en casos raros cuando el número no tiene una representación decimal finita (por ejemplo, cualquier fracción donde el denominador no es 1 o divisible por 2 o 5 – los factores de la base decimal (10)). Por ejemplo:

>>> s = Decimal(7)
>>> Decimal(1)/s/s/s/s/s/s/s*s*s*s*s*s*s*s
Decimal('0.9999999999999999999999999996')
>>> int(Decimal('0.9999999999999999999999999996'))
0

Por lo tanto, es mejor redondear siempre antes de convertir los puntos flotantes en ints, a menos que desee una función de piso.

>>> int(1.9999)
1
>>> int(round(1.999))
2

Otra alternativa es usar la clase Fraction de la biblioteca de fracciones que no se aproxima. (Simplemente sigue sumando / restando y multiplicando los numeradores y denominadores enteros según sea necesario).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *