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 ;      // vergewissern Sie sich,
                              // dass Sie durch ein double 10.0 dividieren
  System.out.println( "Zahl:" + zahl );
  zehntel =  zehntel + inkrement ;
}
System.out.println( "Fertig");

Verwenden Sie Integer für das Zählen

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

Geben Sie ein Limit ein:

FRAGE 12:

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