![]() |
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 ;-) ) |
Re: vergleich von Werten
Zitat:
|
Re: vergleich von Werten
Also da muss ich Dani zustimmen,
1. Auf dem Papier kann ich Die Zahlen immer vergleichen, mathematisch ist hier die Genze "mein koennen". 2. Der Vergleich mit dem Rechner (als Fliesskommazahl) geht nicht, da die Formulierung schon den Fehler impliziert. Sprich ich werde es nicht feststellen koennen, wann zwei zu vergleichende Zahlen zu der Menge "Nicht Arithmetisch Vergleichbar" gehoeren!!!! 3. Zitat:
Da sie nicht gespeichert werden koennen, sind sie entweder NAN oder identisch. 4. Eine Loesung waehre die "Zahl" selbst als String oder als Reihe (q-adischen Darstellung) abzulegen und dann indexweise vergleichen. |
Re: vergleich von Werten
Liste der Anhänge anzeigen (Anzahl: 1)
Hab das hier noch gefunden.
|
Re: vergleich von Werten
ich habe jetzt einfach geschrieben das wenn Werte als Float gespeichert sind man diese nur auf eine bestimmte genauigkeit verleichen kann und habe einen pseudo code geschrieben der einfach jede stelle der Werte miteinander vergleicht.
PS: der Prof geht nächstes Jahr eh in Rente... :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:32 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