Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - EXTENDED-Zähler in Loops
Schorsch99 - Fr 30.01.04 21:43
Titel: EXTENDED-Zähler in Loops
Hi an Alle!
Wer kann mich über folgendes Mysterium aufklären? :shock:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject);
var a: integer; b:extended;
begin b:=-1; for a:=1 to 50 do begin b:=b+0.2; end; end; |
Problem: Nach der 5. Iteration der a-Schleife hat b nicht den Wert 0 sondern
je nach Initialwert von b eine wirre Zahl (bei Startwert b:=-1 z.B. -2,71050543121376E-20), läuft aber ab der 6.
Wiederholung der a-Schleife wieder normal mit 0.2, 0.4, 0.6, ... weiter.
Wie kann das sein???
Wäre um eine Lösung Dankbar!
Gruss, Schorsch99.
Moderiert von
Peter Lustig: Delphi-Tags hinzugefügt
Christian S. - Fr 30.01.04 21:55
Hallo!
Dies liegt an der endlichen Genauigkeit der Zahlendarstellung im Rechner. So kann die Zahl 0,2 nicht exakt dargestellt werden. Wenn Du zu -1 fünf Mal nur ungefähr 0,2 addierst, kommst Du ungefährt zur Null. Aber eben nicht ganz.
Das diese Ungenauigkeit nur bei der Zahl nahe der Null zum Vorscheinen kommt, kann daran liegen, dass für sehr kleine Zahlen eine subnormale Darstellung verwendet wird, welche eine größere Genauigkeit zulässt. Das ist allerdings nur eine Vermutung!
MfG
Peter
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!