Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#8

AW: Distanzberechnung zwischen zwei Koordinaten gibt manchmal eine Fehlermeldung aus

  Alt 21. Jun 2015, 06:20
Ja, das wird hier auch fast wöchentlich durchgekaut. Gleitkommawerte sind in den allerwenigsten Fällen exakt der Wert, den man zuweist/errechnen würde. Sie sind halt nicht unendlich genau, weil dann würden sie unendlich viel Speicher brauchen. (Und unendliche Prozessoren.) Der Wert "1" kann zwar theoretisch exakt dargestellt werden, wenn er aber das Ergebnis einer vorausgegangenen Rechnung ist, ist es sehr wahrscheinlich, dass die 1 nicht exakt getroffen wird. Vermutlich war die 1 in den Fällen in denen es ging eher eine 0,999999999999872136, und in Fällen wo es nicht ging 1,0000000000001234473 (oder so).
Das ist, wie ebenfalls an der Tagesordnung hier, auch der Grund, warum man Floats NIEMALS auf Gleichheit mit anderen Werten prüft. Dafür gibt es die Funktion SameValue() in der Unit Math, die um den potenziell gemachten Fehler* weiss, und ihn je nach Datentyp (Single, Double oder Extended) angepasst berücksichtigt. Du musst also vor dem ArcCos() auf SameValue(x, 1) und SameValue(x, -1) prüfen.

*) Der Fehler ist prinzipbedingt und im Rahmen von Gleitkommazahlen auch niemals zu eliminieren. Wenn man sich mal, z.B. auf der Wikipedia, anschaut wie diese intern dargestellt werden, wird auch recht schnell klar warum das so ist. Ich bin immer wieder platt, WIE viele "Programmierer" um solche absolut elementaren Grundlagen nicht wissen. Was bringen euch eure Ausbilder/Profs bei, bzw. bei Hobbyisten: Was für schrottige Bücher nehmt iht? Die gehören verboten!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat