Autor Beitrag
Schorsch99
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 30.01.04 21:43 
Hi an Alle!

Wer kann mich über folgendes Mysterium aufklären? :shock:

ausblenden 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 user profile iconPeter Lustig: Delphi-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".