![]() |
Fließkommazahlen auf Gleichheit prüfen
Jeder weiß, oder sollte wissen, dass man dies nicht tun sollte. Warum, das werde ich noch zeigen. Allerdings bräuchte ich mal ein kleines Delphi-Beispiel, um dies zu zeigen.
Folgendes geht leider:
Delphi-Quellcode:
Ich bräuchte aber ein entsprechende Beispiel, beim dem die Abfrage auf Gleichheit nicht funktioniert.
var
a: Double; b: Double; begin a := 19.3; b := 2 * 9.65; if a = b then Writeln('gleich') else Writeln('ungleich'); Readln; |
Re: Fließkommazahlen auf Gleichheit prüfen
bei mir ist folgendes ungleich:
Delphi-Quellcode:
Edit1:
var
a, b: Real; begin a := 12345789.987654321; b := 24691357.9975308642 / 2; if a = b then Writeln('gleich') else Writeln('ungleich'); Readln; end. Nach der Delphi 7 PE Hilfe ist Double = Real. |
Re: Fließkommazahlen auf Gleichheit prüfen
Das Beispiel macht aber nur Sinn, wenn man durch zwei anstatt durch fünf teilt. ;)
Danke. Dan habe ich einfach zu wenige Stellen genommen beim Testen. |
Re: Fließkommazahlen auf Gleichheit prüfen
Zitat:
daniel muss wohl gemeiner weise meine post nach
Code:
parsen lassen und es durch
/ 2
Code:
ersetzen lassen.
/ 5
|
Re: Fließkommazahlen auf Gleichheit prüfen
10.0/3.0 und 10*(1.0/3.0) tun genau das selbe bei weniger Schreibaufwand :)
|
Re: Fließkommazahlen auf Gleichheit prüfen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Delphi-Quellcode:
Ausgabe:
var
a, b: Double; begin a := 12345789.987654321; b := 24691579.975308642 / 2; Writeln('a: ', a); Writeln('b: ', b); if a = b then Writeln('gleich') else Writeln('ungleich'); Readln;
Code:
Du hast dich vertan. Zwei mal 12345789.987654321 ist nicht 24691357.9975308642 sondern 24691579.975308642.
a: 1.23457899876543E+0007
b: 1.23457899876543E+0007 gleich @Dax auch dein Beispiel ergibt 'gleich'. EDIT: Übrigens das Beispiel von dieser Seite: ![]() Im Anhang mal mein Artikel als PDF zu der Prolematik. |
Re: Fließkommazahlen auf Gleichheit prüfen
OK, es liegt der Schluss nahe, dass die Delphi Datentypen für dieses Beispiel von Haus aus schon zu genau sind. ;)
|
Re: Fließkommazahlen auf Gleichheit prüfen
wenn man nicht a (=3/10) und b (=3/10) vergleicht, sondern a (=3/10) und 3/10, ist es ungleich, vorrausgesetzt, dass a Double ist. Wenn man Extended wählt, muss man a und 10*(1/3) vergleichen, damit es ungleich ist.
|
Re: Fließkommazahlen auf Gleichheit prüfen
Ist der Artikel denn so verständlich und sachlich richtig oder gibt es noch Ergänzungen / Korrekturen?
|
Re: Fließkommazahlen auf Gleichheit prüfen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz