![]() |
Double Werte vergleichen
Wie vergleicht man Double-Werte?
Ich habe A := 1.0 und B := 10.0. Wenn ich nun if A >= B vergleiche erhalte ich komischerweise True. |
AW: Double Werte vergleichen
Zeig mal deinen Code. Man sollte zudem bei Double-Werten, daran denken, dass die interne Darstellung von der angezeiget abweichen kann. Bei Rechnungen kann zum Beispiel 10.0000000000001 rauskommen, was als 10 ausgegeben wird. Aber ein Vergleich auf x = 10 schlägt dann fehl, wenn x = 10 ist. Deswegen berücksichtigt man dieses Verhalten, indem man ein Epsilon-Wert einführt, in dem man angibt wie ungenau es sein darf.
|
AW: Double Werte vergleichen
Ein Vergleich von 1.0 und 10.0 auf größer-gleich scheitert sicher nicht an der Genauigkeit.
|
AW: Double Werte vergleichen
Wer weiß? :lol:
Deswegen habe ich ja nach Code gefragt. Das mit der Genauigkeit war nur eine Zusatzinfo. |
AW: Double Werte vergleichen
Bei recht nahe beienander liegenden Werten sollte man einen unscharfen Vergleich verwenden:
Delphi-Quellcode:
Das vermeidet automatisch auftretende Rundungsfehler, falls eine Dezimal-Zahl binär nicht exakt abgebildet werden kann.
System.Math.SameValue(const a, b: Double; Epsilon: Double): Boolean; overload;
Gruß Andreas |
AW: Double Werte vergleichen
Genau das meine ich.
|
AW: Double Werte vergleichen
Ihr Lieben,
die Hinweise auf die Vergleichstoleranz mögen ja ganz nett sein, aber wenn man 1.0 mit 10.0 vergleicht, dann braucht man keine Vergleichstoleranz. Vielleich zeigt Dolly uns mal etwas Code. |
AW: Double Werte vergleichen
Zitat:
|
AW: Double Werte vergleichen
Zitat:
Meiner Meinung nach gibt es immer eine, je nach Aufgabenstellung. |
AW: Double Werte vergleichen
Zitat:
|
AW: Double Werte vergleichen
Delphi-Quellcode:
Wäre das deiner Meinung nach unzulässig ?
if System.Math.SameValue(1.0, 10.0, 100.0) then ...
Wenn ja, warum. |
AW: Double Werte vergleichen
Mit Blick auf die Ausgangsfrage, die die Nutzung des ">="-Operatus suggeriert, scheint das schlicht ein anderer Ansatz zu sein.
Zudem haben wir - trotz der dürftigen Informationslage - keinen Hinweis darauf, dass entsprechend große Toleranzen hier gewünscht sind. |
AW: Double Werte vergleichen
Zitat:
Der TE möchte aber nicht auf die Gleichheit zweier Werte Prüfen sondern auf >= und da wäre das Äquivalent mit konfigurierbarer Toleranz ja eher System.Math.CompareValue. Die Vergleiche feuern bei mir beide nicht (wie ich es auch erwarten würde).
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var a, b: Double; begin a := 1.0; b := 10.0; if a>=b then Button1.Caption := 'Ups'; if System.Math.CompareValue(a,b, 10) = 1 then Button1.Caption := 'OOh'; end; |
AW: Double Werte vergleichen
Alles Spekulation. Ohne einen Schnipsel Beispielcode bringt keine Diskussion etwas.
|
AW: Double Werte vergleichen
Hallo,
Zitat:
Ich denke aber, nicht der richtige ... ;) |
AW: Double Werte vergleichen
Ich kann Entwarnung geben. Ich konnte erst jetzt wieder auf den Code gucken. Ich habe in der Testausgabe dummerweise zwei Variablen vertauscht. :pale:
|
AW: Double Werte vergleichen
Hier der passende Smiley für dich: :wall:
:mrgreen: |
AW: Double Werte vergleichen
3 davon würden besser passen. Augen auf beim ... testen.
|
AW: Double Werte vergleichen
:shock:
Wer hätte das gedacht.:wink: Ist aber wohl den meisten schon passiert. Gruß K-H |
AW: Double Werte vergleichen
Zitat:
Lies doch mal #1. DieDolly schrieb Zitat:
|
AW: Double Werte vergleichen
Zitat:
|
AW: Double Werte vergleichen
Zitat:
|
AW: Double Werte vergleichen
Zitat:
Wenn du in einem Double eine Zahl ohne Nachkommastellen (oder alle Nachkommastellen 0 sind) und die Zahl +/- 2^52 nicht übersteigt, dann ist das eine Integerzahl. Bei Vergleichen min anderen Zahlen, die ebenfalls keine Nachkommastellen haben, treten die Probleme mit Vergleichstoleranzen nicht auf. Bei dem Problem, um das es hier ging, und mittlerweise wissen wird ja, dass das Problem keines war, ging es um zwei Zahlen, nämlich 1.0 und 10.0, eben Zahlen ohne Nachkommazahlen. Schau dir doch mal im Debugger an, wie solche Zahlen in der FPU gezeigt werden. Als Zahlen ohne Nachkommastellen. |
AW: Double Werte vergleichen
Zitat:
Wie schrieb DieDolly Zitat:
|
AW: Double Werte vergleichen
Das hat sie hier geschrieben. Aber ich gehe mal davon aus, dass es keine Konstanten sind, sondern Ergebnisse voran gegangener Rechnungen. Und da ist es durchaus interessant, was vorher passiert ist. Wurde gerundet? Wurde gecastet? Wie sehen die Ursprungswerte der Rechnung aus? Mit welchen Datentypen wurde gerechnet? Das kann alles eine Rolle spielen.
|
AW: Double Werte vergleichen
*Räusper*
Die Diskussion basiert auf einem Fehler...das ist allen klar? Sherlock |
AW: Double Werte vergleichen
Psst stör sie nicht. Die Anfänger sitzen andächtig vor dem Monitor und staunen.
Gruß K-H |
AW: Double Werte vergleichen
Zitat:
|
AW: Double Werte vergleichen
Zitat:
![]() Und gut is Gruß K-H |
AW: Double Werte vergleichen
Wie baue ich eine Schleife in einen Thread: Immer wieder die selben Vorschläge bringen ...
|
AW: Double Werte vergleichen
Ich hab Andreas Beitrag übersehen:oops:
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 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