[eside-ghost] Resta rara en python
Pablo Orduña
pablo en ordunya.com
Mar Abr 1 10:52:46 CEST 2008
Yeup!
2008/4/1 Yuki (aka Rubén Gómez) <rugoli en gmail.com>:
> Pues Txipi tiene razón (respecto a las clases de primero :p). Bueno, a
> partir de ahora usaré bc y listo.
Sí, el problema realmente se aplica a todos los lenguajes que usen
coma flotante (por ejemplo:
"""
#include <stdio.h>
int main(int argc, char * argv[]){
printf("%.15f\n",238.55 - 198.0);
return 0;
}
"""
También devuelve 40.550000000000011, y:
"""
class prueba{
public static void main(String [] args){
System.out.println(238.55 - 198.0);
}
}
"""
También imprime 40.55000000000001. El tema son los números de coma
flotante, que en general dan por el saco:
http://geeks.ms/blogs/programancia101/archive/2007/01/05/contando-hacia-atras.aspx
http://geeks.ms/blogs/programancia101/archive/2007/01/31/numeros-bestias-y-descuentos.aspx
bc según el manual "All numbers are represented internally in decimal
and all computation is done in decimal.", o sea que no pasan cosas
como que esto devuelva false:
(0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1) == 1.0;
(que pasará en lenguajes que utilicen coma flotante -C, Python, Java...-)
--
Pablo
Más información sobre la lista de distribución eside-ghost