Como es saber eso 1.2 - 1.0 = 0.2
. Pero cuando intentas hacer lo mismo en python, te sorprenderán los resultados:
>>> 1.2 - 1.0
Producción:
0.199999999999999996
Esto puede considerarse un error en Python, pero no lo es. Esto tiene poco que ver con Python y mucho más con la forma en que la plataforma subyacente maneja los números de coma flotante. Es un caso normal que se encuentra cuando se manejan números de coma flotante internamente en un sistema. Es un problema causado cuando la representación interna de números de punto flotante, que utiliza un número fijo de dígitos binarios para representar un número decimal. Es difícil representar algún número decimal en binario, por lo que en muchos casos conduce a pequeños errores de redondeo.
Conocemos casos similares en matemáticas decimales, hay muchos resultados que no se pueden representar con un número fijo de dígitos decimales,
Ejemplo
10 / 3 = 3.33333333.......
En este caso, tomando como ejemplo 1.2, la representación de 0.2 en binario es 0.00110011001100110011001100......
y así sucesivamente.
Es difícil almacenar internamente este número decimal infinito. Normalmente, el valor de un objeto flotante se almacena en punto flotante binario con una precisión fija ( normalmente 53 bits ).
Entonces representamos 1.2 internamente como,
1.0011001100110011001100110011001100110011001100110011
Que es exactamente igual a:
1.1999999999999999555910790149937383830547332763671875
Aún así, estás pensando por qué Python no está resolviendo este problema , en realidad no tiene nada que ver con Python. Sucede porque es la forma en que la plataforma c subyacente maneja los números de punto flotante y, en última instancia, con la inexactitud, siempre habremos estado escribiendo números como una string de números fijos de dígitos.
Tenga en cuenta que esto está en la naturaleza misma del punto flotante binario: esto no es un error ni en Python ni en C , y tampoco es un error en su código. Verá el mismo tipo de comportamiento en todos los idiomas que admitan la aritmética de punto flotante de nuestro hardware, aunque es posible que algunos idiomas no muestren la diferencia de forma predeterminada o en todos los modos de salida). Tenemos que considerar este comportamiento cuando nos preocupamos por los problemas matemáticos que necesitan precisiones exactas o cuando lo usamos dentro de declaraciones condicionales.
Consulte la sección de punto flotante en la documentación de Python para ver más comportamientos de este tipo.
Publicación traducida automáticamente
Artículo escrito por Gokul Gopakumar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA