double zahl ; int zehntel = 0; int inkrement = 1; // jede 1 repräsentiert ein Zehntel while ( zehntel <= 100 ) // 100 Zehntel sind 10.0 { zahl = zehntel/10.0 ; // vergewissert Euch // durch ein double 10.0 zu dividieren System.out.println( "Zahl:" + zahl ); zehntel = zehntel + inkrement ; } System.out.println( "Fertig");
Wir könnten ein double
als Schleifenkontrollvariable haben wollen.
Dann würden wir bei jeder Iteration 0.1 addieren. Das könnte fast funktionieren, aber führt zu Fehlern.
Der Wert 0.1 kann binär nicht exakt dargestellt werden. Eine Schleife, die wiederholt 0.1 zu einer Variablen addiert wird Fehler akkumulieren.
Nur zum Spaß, hier ist ein Programmfragment, das genau das tut. Wir geben verschiedene Grenzwerte ein und sehen wie groß der Fehler dabei ist:
Wenn wir einen Grenzwert von 1000.0 eingeben, was würde ausgegeben werden, wenn die Arithmetik absolut genau wäre?