|
Il s'agit d'un probleme que vous connaissez
surement deja.
Le programme suivant:
package sans_titre1;
/**
* Titre : * Description : * Copyright : Copyright (c) 2002 * Soci�t� : * @author * @version 1.0 */ public class Sans_titre1
{ static public double freq = 191.0; static public int i; public Sans_titre1()
{ } public static void main(String[]
args)
{ System.out.println(""); System.out.println("Double Testing"); for (i=0; i<5; i++) { Double d = new Double(freq); System.out.println("i = "+ i+": Double = "+d.doubleValue()+" freq= "+freq); freq = freq + 5E-2; }
System.out.println("");
for (double f=192.1;f<=193.2;) { f+=0.05d; Double d=new Double(f); System.out.println(d.doubleValue()+""); }/*fin du for */ }/* fin du main*/ }
donne les resultats suivants:
Double Testing
i = 0: Double = 191.0 freq= 191.0 i = 1: Double = 191.05 freq= 191.05 i = 2: Double = 191.10000000000002 freq= 191.10000000000002 i = 3: Double = 191.15000000000003 freq= 191.15000000000003 i = 4: Double = 191.20000000000005 freq= 191.20000000000005 192.15
192.20000000000002 192.25000000000003 192.30000000000004 192.35000000000005 On voit bien que dans les deux cas, un
supplement infime est ajoute au resultat, ce qui nuit a un test de comparaison
sur egalite. De plus, dans le cas ou on soustrairait au lieu d'additionner le
resultat serait encore pire. Il y a bien des solutions en mulitpliant par 10 et
en divisant par 10 mais je cherche une solution elegante avec un
listing comprehensible. L'un de vous aurait-il une idee?
Alain
|
- JSP+Download s�bastien Layer
- Noury
