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 ; // vergewissern Sie sich, // dass Sie durch ein double 10.0 dividieren System.out.println( "Zahl:" + zahl ); zehntel = zehntel + inkrement ; } System.out.println( "Fertig");
Sie könnten ein
double
oder float
als Schleifenkontrollvariable haben wollen.
Sie würden 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. Geben Sie verschiedene Grenzwerte ein und sehen Sie wie groß der Fehler dabei ist:
// der Anwender (Sie) gibt einen Grenzwert ein float inkrement = 0.1 ; float zahl = 0.0 ; while ( zahl < limit ) { zahl = zahl + inkrement; } System.out.println( "Der Wert war " + zahl + " als die Schleife beendet wurde");