Das Problem wird durch das Wort "gut konditioniert" angezeigt. Es ist eine Frage der Computerarithmetik, nicht der Mathematik.
Hier sind die grundlegenden Fakten zu berücksichtigen:
Ein Bogenmaß auf der Erde überspannt fast 10 ^ 7 Meter.
Die Cosinusfunktion für Argumente x in der Nähe von 0 ist ungefähr gleich 1 - x ^ 2/2.
Gleitkommazahlen mit doppelter Genauigkeit haben eine Genauigkeit von ca. 15 Dezimalstellen.
Die Punkte (2) und (3) implizieren, dass bei x um einen Meter oder 10 ^ -7 Radiant (Punkt 1) fast die gesamte Genauigkeit verloren geht: 1 - (10 ^ -7) ^ 2 = 1 - 10 ^ - 14 ist eine Berechnung, bei der die ersten 14 der 15 signifikanten Ziffern alle gelöscht werden und nur eine Ziffer übrig bleibt, um das Ergebnis darzustellen. Das Umkehren dieses Wertes (wie es der inverse Cosinus "acos" tut) bedeutet, dass die Berechnung von acos für Winkel, die Entfernungen in Metern Länge entsprechen, nicht mit einer sinnvollen Genauigkeit durchgeführt werden kann. (In bestimmten schlimmen Fällen ergibt der Genauigkeitsverlust einen Wert, bei dem acos nicht einmal definiert ist, sodass der Code zusammenbricht und keine Antwort, keine unsinnige Antwort oder keinen Absturz der Maschine liefert.) Ähnliche Überlegungen legen nahe, dass Sie die Verwendung des inversen Kosinus vermeiden sollten Bei Entfernungen von weniger als ein paar hundert Metern hängt es davon ab, wie viel Präzision Sie verlieren möchten.
Die Rolle, die acos in der naiven Kosinussatzformel spielt, besteht darin, einen Winkel in eine Entfernung umzuwandeln. Diese Rolle spielt atan2 in der Haversin-Formel. Die Tangente eines kleinen Winkels x ist ungefähr gleich x selbst. Folglich wird der inverse Tangens einer Zahl, der ungefähr dieser Zahl entspricht, im wesentlichen ohne Genauigkeitsverlust berechnet. Aus diesem Grund ist die Haversinformel, obwohl sie dem Gesetz der Cosinusformel mathematisch äquivalent ist, für kleine Entfernungen (in der Größenordnung von 1 Meter oder weniger) weit überlegen .
Hier ist ein Vergleich der beiden Formeln unter Verwendung von 100 zufälligen Punktpaaren auf dem Globus (unter Verwendung von Mathematics Berechnungen mit doppelter Genauigkeit).
Sie können sehen, dass die beiden Formeln bei Entfernungen von weniger als 0,5 Metern voneinander abweichen. Oberhalb von 0,5 Metern stimmen sie eher überein. Um zu zeigen, wie eng sie übereinstimmen, werden im nächsten Diagramm die Verhältnisse des Kosinusgesetzes dargestellt: Haversinusergebnisse für weitere 100 zufällige Punktpaare, wobei sich ihre Breiten- und Längengrade zufällig um bis zu 5 Meter unterscheiden.
Dies zeigt, dass das Gesetz der Kosinusformel bis zu 3-4 Dezimalstellen gilt, sobald der Abstand 5-10 Meter überschreitet. Die Anzahl der Dezimalstellen der Genauigkeit nimmt quadratisch zu; bei 50-100 Metern (eine Größenordnung) erhalten Sie also eine Genauigkeit von 5-6 dp (zwei Größenordnungen); Auf 500-1000 Metern erhalten Sie 7-8 dp usw.