![]() |
if-Abfrage mit Extended - Trotz gleichheit False
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
mal wieder ein Phänomen, was ich mir so nicht erklären kann. Aber vielleicht könnt ihr mir auf die Sprünge helfen. Ich habe eine Function, die verschiedene Werte auf gleichheit Prüfen soll. Doch leider scheint das bei Datentyp Extended nicht zu klappen, obwohl laut Debugger der Wert gleich ist. Ich habe mal einen Screenshot beigefügt, dann wird deutlich was ich meine. Der Code ist schrecklich, ich weiß. Ist nur für's debugging so geschrieben. |
AW: if-Abfrage mit Extended - Trotz gleichheit False
Der für die Anzeige aufbereitete Wert ist gleich. Der in den Variablen stehende Wert ist es nicht.
Für Vergleiche von Fließkommazahlen solltest Du CompareeValue aus der Math-Unit verwenden. |
AW: if-Abfrage mit Extended - Trotz gleichheit False
Hi,
Die Fließkommazahlen sind aufgrund ihrer internen Darstellung nicht exakt gleich (irgendwo an der gefühlt 190.000 Nachkomastelle), auch wenn der Debugger dies so anzeigen mag. Verwende die Funktion CompareValue, welche hier eine (minimale) Toleranz berücksichtigt. Siehe: ![]() Cheers, S. |
AW: if-Abfrage mit Extended - Trotz gleichheit False
Folgendes hatte ich mal zu dem Thema zusammen gesucht:
![]() ![]() Zitat:
|
AW: if-Abfrage mit Extended - Trotz gleichheit False
Jepp, das wars ;-) Super, vielen Dank. Hätt ich jetzt gar nicht gedacht.
Da der eine Wert aus einer MSSQL-DB stamt, der zweite jedoch aus einer Textdatei umgesetzt wird, wärs jetzt mal interessant, wer mir den Unterschied an x-ten Stelle da reinschummelt....ich fürchte mal des SQL-Server. |
AW: if-Abfrage mit Extended - Trotz gleichheit False
Da schummelt keiner etwas rein - bzw. könnten sogar schon die Programme dafür "verantwortlich" sein, die diese Werte geschrieben haben. In Gänsefüßchen, weil letztlich immer nur die FPU, bzw. eigentlich die Bitbreite der FPU das wichtige ist. Die Ungenauigkeit ist im grundlegensten Prinzip der Fließkommarechnung begründet, und tritt immer und überall auf, wo Fließkommazahlen verwendet werden. Und jede einzelne Operation macht es schlimmer, so dass man (fast) sagen kann: Je mehr Rechenschritte eine Zahl durchlaufen musste, desto größer ist der Fehler im Vergleich zu einer hypothetischen Unendlich-Bit-FPU. Kommt noch Um- und Rückwandlung mit Strings dazu, wird es feierlich :). Da gibt's keinen Schuldigen*, das ist einfach so.
*) Man kann komplexe Rechnungen z.T. geschickt genug aufbauen um die Aufsummierung der Fehler zu minimieren, aber gemacht wird er eigentlich immer. PS: Das ist eigentlich etwas, was jedem Entwickler/Informatiker am ersten Tag von Ausbildung/Studium beigebracht werden müsste. Und dann täglich wiederholt, wenn man zugrunde legt, wie oft die Frage hier auftaucht =) |
AW: if-Abfrage mit Extended - Trotz gleichheit False
Und wofür braucht man ultragenaue Rechnungen, die dann sowieso falsch sind?:shock:
Bisher runde ich auch Float-Zahlen zu Integer, die sind sowieso die einfachsten! :-D |
AW: if-Abfrage mit Extended - Trotz gleichheit False
Hast Du schon mal etwas von Logarithmen gehört?
oder Rechenschieber? Fließkommazahlen arbeiten nach dem gleichen Prinzip, so genau wie nötig. Wenn Du es ganz genau haben willst dann mußt Du eben Currency oder ähnlich Typen nutzen. Gruß K-H |
AW: if-Abfrage mit Extended - Trotz gleichheit False
wie genau muss es denn sein?
Wenn die 5. Zahl noch bedeutend ist. Tschuldigung allerdings kann man sonst runden oder den Wert mal 1000 nehmen und in ein Integer runden. |
AW: if-Abfrage mit Extended - Trotz gleichheit False
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 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