Il problema è indicato dalla parola "ben condizionata". È una questione di aritmetica informatica, non matematica.
Ecco i fatti di base da considerare:
Un radiante sulla terra si estende per quasi 10 ^ 7 metri.
La funzione coseno per gli argomenti x vicino a 0 è approssimativamente uguale a 1 - x ^ 2/2.
La virgola mobile a precisione doppia ha circa 15 cifre decimali di precisione.
I punti (2) e (3) implicano che quando x è di circa un metro o 10 ^ -7 radianti (punto 1), quasi tutta la precisione viene persa: 1 - (10 ^ -7) ^ 2 = 1 - 10 ^ - 14 è un calcolo in cui le prime 14 delle 15 cifre significative si annullano tutte, lasciando solo una cifra per rappresentare il risultato. Capovolgendolo (che è ciò che fa il coseno inverso, "acos"), significa che calcolare acos per angoli che corrispondono a distanze di lunghezza del metro non può essere eseguito con una precisione significativa. (In alcuni casi negativi la perdita di precisione fornisce un valore in cui acos non è nemmeno definito, quindi il codice si romperà e non fornirà risposta, una risposta senza senso o arresterà in modo anomalo la macchina.) Considerazioni simili suggeriscono che è necessario evitare l'uso del coseno inverso se sono coinvolte distanze inferiori a poche centinaia di metri, a seconda di quanta precisione sei disposto a perdere.
Il ruolo svolto dall'acos nella formula ingenua della legge dei coseni è quello di convertire un angolo in una distanza. Questo ruolo è interpretato da atan2 nella formula di haversine. La tangente di un angolo piccolo x è approssimativamente uguale a x stessa. Di conseguenza, la tangente inversa di un numero, essendo approssimativamente tale numero, viene calcolata essenzialmente senza perdita di precisione. Questo è il motivo per cui la formula di haversine, sebbene matematicamente equivalente alla formula della legge dei coseni, è di gran lunga superiore per le piccole distanze (nell'ordine di 1 metro o meno).
Ecco un confronto tra le due formule usando 100 coppie di punti casuali sul globo (usando i calcoli della doppia precisione di Mathematica).
Potete vedere che per distanze inferiori a circa 0,5 metri, le due formule divergono. Al di sopra di 0,5 metri tendono ad essere d'accordo. Per mostrare quanto siano d'accordo, la trama successiva mostra i rapporti della legge dei coseni: risultati di haversine per altre 100 coppie di punti casuali, con le loro latitudini e lunghezze che differiscono casualmente fino a 5 metri.
Ciò dimostra che la formula della legge dei coseni è buona con 3-4 decimali una volta che la distanza supera i 5-10 metri. Il numero di cifre decimali di precisione aumenta in modo quadratico; quindi a 50-100 metri (un ordine di grandezza) si ottiene una precisione di 5-6 dp (due ordini di grandezza); a 500-1000 metri ottieni 7-8 dp, ecc.