In volgende voorbeeld wordt dit op eenvoudige wijze getoond en al een oplossing gegeven met de statisch methode gelijk.
Code: Selecteer alles
public class Nauwkeurigheid {
public static double epsilon=10e-40;
public static void main(String[] args) {
double a=0.3;
double b=0.2;
double c=0.1;
System.out.println(c+b+a);
System.out.println(c+b+a == 0.6);
System.out.println(gelijk(c+b+a,0.6));
System.out.println();
System.out.println(a+b+c);
System.out.println(a+b+c ==0.6);
System.out.println(gelijk(a+b+c,0.6));
}
public static boolean gelijk(double a, double b){
return Math.abs(a-b)<epsilon;
}
}
Code: Selecteer alles
0.6000000000000001
false
false
0.6
true
true
De vraag is dus als volgt:
- Wat zijn de richt waarden van epsilon zo al?
- zijn er beter methoden om gelijkheid van doubles te controleren.
- doubles hebben een eindige precisie. Is er een interval waarin de berekeningen met een optimale nauwkeurigheid kunnen gebeuren?