¿Por qué 0.1 + 0.2 – 0.3 no es 0 en Python?

Si nos preguntasen cuál sería el resultado de esta operación al ejecutarla en el intérprete de Python, pensaríamos sin duda alguna el resultado es 0 o 0.0, pero muy lejos de eso, el intérprete nos respondería que el resultado es 5.551115123125783e-17 ¿Por qué pasa esto?

No es un fallo en la matriz, el resultado es un número muy muy pequeño, pero sigue sin ser 0. El problema viene por la forma en la que se representan los números de punto flotante en el ordenador, ya que se hace como fracciones en base 2 (binarias).

Muchas fracciones decimales no pueden ser representadas en base 2, es lo que pasa con el 0.1. Por ejemplo, si sumamos 0.2 + 0.2 usando el intérprete de python el resultado sería 0.4:

pero si sumamos 0.1 + 0.2 el resultado no es 0.3, si no 0.30000000000000004

Viendo esto, ya sabemos que 0.1 + 0.2 – 0.3 no será 0:

¿Cómo podemos hacer que sea 0?

Tenemos que hacer uso de la librería decimal y cuidado porque tenemos que darle los números como strings.

from decimal import Decimal

print(
     Decimal('0.1') +
     Decimal('0.2') -
     Decimal('0.3')
)

El resultado usando Decimal sí sería 0.0.

Publicado por Fj Asensi

BigData & MachineLearning Developer | Senior Microsoft Dynamics 365 Business Central Developer

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: