Problema con la precisión del double

Iniciado por danielo-, 27 Marzo 2012, 15:47 PM

0 Miembros y 1 Visitante están viendo este tema.

danielo-

Haciendo una tarea para la creación de Redes Neuronales Artificiales, en donde necesito una gran precisión con los numeros, me tope con un problemita, que no busco como dar la explicación ni como resolver, la cuestión es simple:

Código (java) [Seleccionar]

double d1=0.5;
double d2 = 0.4;
System.out.println(d2-d1);


en teoría el resultado debería dar = 0.1, pero el relsultado de esta operación en java es de: -0.09999999999999998 o.O ??? no lo entiendo, quiero pensar que tiene que ver con la precisión del valor double, pero pero... sigo sin entender U.U

visualfree

Aca te hice un ejemplo... lo que te falta es redondear y restar a la inversar ...


class Prueba{
        public static void main(String[] args)
        {
                double d1=0.5;
                double d2 = 0.4;

                double resta=(d1-d2);
                System.out.println(redondear(resta,2));

        }
        static double redondear( double numero, int decimales ) {
                return Math.round(numero*Math.pow(10,decimales))/Math.pow(10,decimales);
        }

}

Pablo Videla

Pero porque no da el resultado que debería dar y da ese numero inexacto? Esa es la pregunta y yo tambien quiero saber. No debería ser necesario redondearlo porque da un numero exacto. Sacalo con la calculadora XD

fran800m

Sería interesante una respuesta, porque a veces me ha pasado parecido con PHP y es frustrante, te ves impotente ante algo que carece por completo de sentido.

danielo-

Exacton, no entiendo porque sucede esto, y es algo tedioso, pero en fin, lo he resuelto de la siguiente manera:
Código (java) [Seleccionar]

public double redondea(double num){
        BigDecimal res;
        res = new BigDecimal(num).setScale(12, BigDecimal.ROUND_HALF_DOWN);
        double resultado = res.doubleValue();
        //System.out.println(resultado);
        return resultado;
    }