![]() |
vergleich von Werten
Für die Uni müssen wir folgendes Problem lösen:
Beim Vergleich zweier Float Werte kann es zu Fehlern kommen, wenn sich die beiden Werte erst nach einer bestimmten Nachkommastelle unterscheiden, welche von Float nicht mehr gespeichert werden. Wie könnte man die Werte vergleichen, ohne das diese Problematik auftritt? Danke! |
Re: vergleich von Werten
Den minimalen Unterschied, der noch als Unterschied gilt (sagen wir 0.001, alle Differenzen darunter gelten als gleich) nennen wir mal Epsilon. Wenn nun |float1 - float2| <= Epsilon ist, sind beide im Rahmen der Epsilon-Genauigkeit gleich.
|
Re: vergleich von Werten
wie währe es denn mit runden?
|
Re: vergleich von Werten
Du meinst, du hast zwei Float-Zahlen, z.B.:
1,000000005 und 1,000000006 Und wenn man jetzt Single nehmen würde (man kann das Beispiel auch für Extended umbauen), dann sind die Zaheln gleich, da Single die 5 und 6 nicht mehr speichern kann. hmmm? Die Zahlen eben als Brüche speichern? |
Re: vergleich von Werten
die Lösung muss etwas mit dem Thema diskretisierung zu tun haben...
|
Re: vergleich von Werten
Die Zahlen durch bestimmte Zerlegung "kürzen". Alle vorkommastellen kann man zum Beispiel seperat speichern. Die verbleibenden Stellen kann man nun durch bestimmte Algorithmen kürzen. Wenn zum Beispiel etliche 0en (nullen) enthalten sind, kann man diese durch ein auslagern als Exponenten auch entnehmen.
So wäre zum Beispiel die Zahl 6.0000000000000005800000001 folgend zu speichern: Vorkommawert: 6 Nachkommawerte: 15x0 + 58 + 7x0 + 1 War es nciht extended mit 16 signifikanten Nachkommastellen? Lt. dem Problem des TE würde an dieser Stelle sich der Wert der Zahlen wohl erst ab der 17. Stelle nach dem Komma unterscheiden. Doch da hier schon erste Ungenauigkeiten durch die Rundung der Zahl entstehen wäre es vielleicht auch sinnvoll, die Rechnung aus der die Zahl entsteht zu belassen. Schaue man bei Wikipedia zum Thema: ![]() Dann wäre mein Vorschlag wohl schon dementiert :) |
Re: vergleich von Werten
Es gibt dafür irgendne Delphi-Funktion... IsEqual, FloatEqual, FloatIsEqual oder irgendsowas in der Art. Auf jeden Fall verwendet die auch die Epsilon-Methode, und so sollte man es wohl auch machen.
|
Re: vergleich von Werten
Zitat:
|
Re: vergleich von Werten
Aaah, ich hab die Frage falsch verstanden. In dem Fall könnte man eventuell einen von Hagens DECMath-Typen verwenden. Die sind - IIRC - beliebig genau.
|
Re: vergleich von Werten
Zitat:
die standardmethode, ist die von DAX. diese solltest du auch verwenden... (ist im übrigen unabhängig von der programmiersprache ;-) ) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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