mit double von negativem Startwert hochzählen
-
Geli schrieb:
kommt aber nicht's blitzt nur kurz ein fenster auf, wo liegt der fehler ?
Die meistgestellten Fragen, #2.
-
n=0 ist eine Zuweisung und kein Vergleich. Diese Zuweisung, wenn man sie zu bool konvertiert, liefert immer false. Zu dem zweiten Teil der for-Schleife sagt man zwar "Abbruchbedingung", aber das ist von Dir anscheinend falsch verstanden worden. Die Schleife wird abgebrochen, wenn die Bedingung false ist. Daher läuft das, was in der Schleife steht nie. Wenn man das korrigiert, würde es so aussehen:
for (double n=-1; n<=0; n=n+0.1)Aber selbst das ist zumindest ungeschickt, da das Rechnen mit double Rundungsfehler mit sich bringt. Die Zahl 0,1 ist auch nicht exakt darstellbar. Das heißt, dass Du eventuell die 0 nicht mehr mitnimmst, da n in der "letzten Iteration" 0,0000000000000003124235 oder so etwas sein könnte, was ja größer als 0 ist.
Bzgl "kurz aufblitzen" guck bitte hier in der FAQ nach.
-
@krümelkacker
Warum sollte das so nicht gut sein? Du hast ja ein <= und kein == drin.
-
drakon schrieb:
@krümelkacker
Warum sollte das so nicht gut sein? Du hast ja ein <= und kein == drin.Aber -1 + 10 * 0.1 könnte >0 sein. Falls man beabsichtigt die 0 noch mitzunehmen, sollte man sicherheitshalber auf <(0 + halbe_schrittweite) prüfen.
-
Hmm. Ok.
Kommt wohl drauf an, was man mit der Schleife beabsichtigt zu tun.
-
drakon schrieb:
Hmm. Ok.
Kommt wohl drauf an, was man mit der Schleife beabsichtigt zu tun.Ja, normalerweise würde man das ja auch anders schreiben, weil <= bei for-Schleifen als Abbruchbedingung unüblich ist. Aber auch dann ist es gefährlich nur <0 zu schreiben, wenn die 0 nicht mitgenommen werden soll, aus den gleichen Gründen.
-
Mit <0 als Abbruchbedingung bekomme ich nach -0.1 noch eine -1.38778e-16
http://codepad.org/olSnuWrdkk
-
Für double-Werte nimmt man besser eine while-Schleife.

-
berniebutt schrieb:
Für double-Werte nimmt man besser eine while-Schleife.

Was kann die while-Schleife denn besser? Hmm?
In diesem Fall sollte der Code eher so aussehen:
for (int i=-10; i<=0; ++i) { cout << i/10.0 << endl; }Klar, mit'ner while-Schleife kannst Du das auch machen, wenn Du willst. Viel besser wird's dadurch aber nicht...
-
[cpp]for (int i=-10; i<=0; ++i) {[/cpp]
stimmt das? sieht irgendwie nach
int i = i - 1;aus, habs aber nicht ausprobiert.
-
krümelkacker schrieb:
berniebutt schrieb:
Für double-Werte nimmt man besser eine while-Schleife.

Was kann die while-Schleife denn besser? Hmm? ...
Klar, mit'ner while-Schleife kannst Du das auch machen, wenn Du willst. Viel besser wird's dadurch aber nicht...
Dann nimm doch gleich die BASIC-Interpreter-Methode mit gotos. Kannst auch alles mit machen - musst allein etwas mehr nachdenken! :p