zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

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");

Verwendet Integer für das Zählen

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:

// der Anwender gibt einen Grenzwert ein
double inkrement   = 0.1 ;
double zahl = 0.0 ;
double limit =  ;


while ( zahl < limit )
{
  zahl = zahl + inkrement;
}
System.out.println( "Der Wert war " + zahl + " als die Schleife beendet wurde");

Gebt ein Limit ein:

FRAGE 12:

Wenn wir einen Grenzwert von 1000.0 eingeben, was würde ausgegeben werden, wenn die Arithmetik absolut genau wäre?