[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