Problem wskazuje słowo „dobrze uwarunkowane”. To kwestia arytmetyki komputerowej, a nie matematyki.
Oto podstawowe fakty do rozważenia:
Jeden radian na ziemi ma prawie 10 ^ 7 metrów.
Funkcja cosinus dla argumentów x w pobliżu 0 jest w przybliżeniu równa 1 - x ^ 2/2.
Zmienna zmiennoprzecinkowa podwójnej precyzji ma około 15 cyfr dziesiętnych precyzji.
Punkty (2) i (3) oznaczają, że gdy x wynosi około jednego metra lub 10 ^ -7 radianów (punkt 1), prawie cała precyzja jest tracona: 1 - (10 ^ -7) ^ 2 = 1 - 10 ^ - 14 jest obliczeniem, w którym pierwsze 14 z 15 cyfr znaczących wszystkie są anulowane, pozostawiając tylko jedną cyfrę reprezentującą wynik. Odwracanie tego (co robi odwrotny cosinus „acos”) oznacza, że obliczanie acos dla kątów odpowiadających odległościom metra nie może być wykonane z żadną znaczącą dokładnością. (W niektórych złych przypadkach utrata precyzji daje wartość, w której acos nie jest nawet zdefiniowany, więc kod się zepsuje i nie da odpowiedzi, bezsensownej odpowiedzi lub zawiesi maszynę.) Podobne uwagi sugerują, że należy unikać używania odwrotnego cosinusa jeśli występują odległości mniejsze niż kilkaset metrów, w zależności od tego, ile precyzji jesteś gotów stracić.
Rolą acos w naiwnej formule prawa cosinusów jest konwersja kąta na odległość. Tę rolę odgrywa atan2 w formule haverine. Styczna małego kąta x jest w przybliżeniu równa samemu x . W konsekwencji odwrotna styczna liczby, która jest w przybliżeniu tą liczbą, jest obliczana zasadniczo bez utraty precyzji. Właśnie dlatego formuła haversine, choć matematycznie równoważna zasadzie formuły cosinus, jest znacznie lepsza dla małych odległości (rzędu 1 metra lub mniejszej).
Oto porównanie dwóch formuł wykorzystujących 100 losowych par punktowych na kuli ziemskiej (przy użyciu obliczeń podwójnej precyzji Mathematica).
Widać, że dla odległości mniejszych niż około 0,5 metra obie formuły się różnią. Powyżej 0,5 metra zwykle się zgadzają. Aby pokazać, jak ściśle się ze sobą zgadzają, następny wykres pokazuje stosunki prawa cosinusów: wyniki haverine dla kolejnych 100 losowych par punktowych, przy czym ich szerokości i długości geograficzne różnią się losowo o maksymalnie 5 metrów.
To pokazuje, że prawo formuły cosinus jest dobre do 3-4 miejsc po przecinku, gdy odległość przekroczy 5-10 metrów. Liczba miejsc dziesiętnych dokładności rośnie kwadratowo; tak więc przy 50-100 metrach (jeden rząd wielkości) otrzymujesz dokładność 5-6 dp (dwa rzędy wielkości); na 500-1000 metrów dostajesz 7-8 dp itp.