g***@decadence.it
2005-11-20 20:33:13 UTC
Ciao a tutti. :)
ditemi che non sono pazzo... come è possibile questo?
dopo una domenica pomeriggio a controllare del codice che produce
risultati errati mi ritrovo a fronteggiare dei problemi di arrotondamento
nelle *moltiplicazioni*...
riassumendo in breve, anche il più semplice dei programmi non genera il
risultato che dovrebbe.
il mio codice esegue 2 conteggi su dati estratti da sql e deve verificare
se il totale dei due conteggi è uguale (un saldo dare e un saldo avere,
insomma)
facendo il debug riga per riga, saltano fuori strane cifre.
allora scrivo del codice da zero tanto per fare una prova, metto due
numeri a caso, il codice deve fare la moltiplicazione di 3.0 * 30.1, che
anche a mente sono in grado di risolvere a 90.3 eppure java mi calcola un
valore diverso, molto prossimo ma diverso.
ma come è possibile?
devo mettermi a controllare tutti i risultati anche delle moltiplicazioni?
questo è il codice che ho eseguito per il test.
public class Prova {
public static void main(String[] args) {
double a = 3.0;
double b = 30.1;
double c = a * b;
double d = 90.3;
System.out.println(c);
if( c == d )
System.out.println("tutto ok");
else
System.out.println("santo cielo... :(");
}
}
e l'output è:
90.30000000000001
santo cielo... :(
stesso risultato con J2SE 5.0 update 5 su Linux e su Windows e anche con
J2SE 6.0 rc61 su Linux, in tutto su tre macchine diverse.
a me non sembra per niente normale, eppure non sto facendo nulla di
speciale... capita solo a me?
ciao e grazie
gl
ditemi che non sono pazzo... come è possibile questo?
dopo una domenica pomeriggio a controllare del codice che produce
risultati errati mi ritrovo a fronteggiare dei problemi di arrotondamento
nelle *moltiplicazioni*...
riassumendo in breve, anche il più semplice dei programmi non genera il
risultato che dovrebbe.
il mio codice esegue 2 conteggi su dati estratti da sql e deve verificare
se il totale dei due conteggi è uguale (un saldo dare e un saldo avere,
insomma)
facendo il debug riga per riga, saltano fuori strane cifre.
allora scrivo del codice da zero tanto per fare una prova, metto due
numeri a caso, il codice deve fare la moltiplicazione di 3.0 * 30.1, che
anche a mente sono in grado di risolvere a 90.3 eppure java mi calcola un
valore diverso, molto prossimo ma diverso.
ma come è possibile?
devo mettermi a controllare tutti i risultati anche delle moltiplicazioni?
questo è il codice che ho eseguito per il test.
public class Prova {
public static void main(String[] args) {
double a = 3.0;
double b = 30.1;
double c = a * b;
double d = 90.3;
System.out.println(c);
if( c == d )
System.out.println("tutto ok");
else
System.out.println("santo cielo... :(");
}
}
e l'output è:
90.30000000000001
santo cielo... :(
stesso risultato con J2SE 5.0 update 5 su Linux e su Windows e anche con
J2SE 6.0 rc61 su Linux, in tutto su tre macchine diverse.
a me non sembra per niente normale, eppure non sto facendo nulla di
speciale... capita solo a me?
ciao e grazie
gl