Kommen wir zu meiner Frage:
Die Zahl 0,20000000000000029 in doppelter Genauigkeit
0011111111001001100110011001100110011001100110011001100110100100
Das ist eigentlich die Nummer
0,20000000000000028865798640254070051014423370361328125
Ebenso
die Zahl 0,3213213214213222219 in doppelter Genauigkeit 0011111111010100100100001000011101001101110000001100010111111001
Diese Nummer ist tatsächlich 0.321321321421322247946505967775010503828525543212890625
Sehen wir uns nun den Java-Code und die Ausgaben unten an.
Code: Select all
class Main {
public static void main(String[] args) {
double x = 0.2000000000000002900; //
double y = 0.3213213214213222219; //
System.out.printf("x = %.20f , y = %.20f%n", x, y);
}
}
x = 0,20000000000000030000, y = 0,32132132142132225000
Von hier aus verstehen wir, dass die Ausgabezahl x = 0,20000000000000030000 die Zahl ist 0,20000000000000028865798640254070051014423370361328125 auf 16 Ziffern gerundet.
Die Ausgabezahl y = 0,32132132142132225000 ist die Zahl 0,321321321421322247946505967775010503828525543212890625 auf 17 Ziffern gerundet.
Hier ist die Frage: Warum wurde eine der Zahlen auf 16er Genauigkeit gerundet, während die andere auf 17 gerundet wurde? Warum haben sie nicht beide eine Genauigkeit von 16? Oder warum haben sie nicht beide eine Genauigkeit von 17?
Warum sind die Genauigkeiten unterschiedlich?