O problema é indicado pela palavra "bem condicionado". É uma questão de aritmética computacional, não matemática.
Aqui estão os fatos básicos a serem considerados:
Um radiano na Terra mede quase 10 ^ 7 metros.
A função cosseno para argumentos x próximos a 0 é aproximadamente igual a 1 - x ^ 2/2.
O ponto flutuante de precisão dupla possui cerca de 15 dígitos decimais de precisão.
Os pontos (2) e (3) implicam que, quando x está em torno de um metro ou 10 ^ -7 radianos (ponto 1), quase toda a precisão é perdida: 1 - (10 ^ -7) ^ 2 = 1 - 10 ^ - 14 é um cálculo no qual os 14 primeiros dos 15 dígitos significativos são cancelados, deixando apenas um dígito para representar o resultado. Girar isso (que é o que o cosseno inverso, "acos", faz) significa que calcular acos para ângulos que correspondem a distâncias de comprimento de metro não pode ser feito com precisão significativa. (Em certos casos ruins, a perda de precisão fornece um valor em que nem o acos é definido, portanto o código será quebrado e não dará resposta, uma resposta sem sentido ou travará a máquina.) Considerações semelhantes sugerem que você deve evitar o uso do cosseno inverso se estiverem envolvidas distâncias inferiores a algumas centenas de metros, dependendo da precisão que você deseja perder.
O papel desempenhado pelos acos na fórmula ingênua da lei dos cossenos é converter um ângulo em uma distância. Esse papel é desempenhado por atan2 na fórmula do haversine. A tangente de um pequeno ângulo x é aproximadamente igual a x . Consequentemente, a tangente inversa de um número, sendo aproximadamente esse número, é calculada essencialmente sem perda de precisão. É por isso que a fórmula haversine, embora matematicamente equivalente à lei da lei dos cossenos, é muito superior para pequenas distâncias (da ordem de 1 metro ou menos).
Aqui está uma comparação das duas fórmulas usando 100 pares de pontos aleatórios no globo (usando os cálculos de precisão dupla do Mathematica).
Você pode ver que, para distâncias inferiores a 0,5 metros, as duas fórmulas divergem. Acima de 0,5 metros, eles tendem a concordar. Para mostrar o quanto eles concordam, o próximo gráfico mostra as proporções da lei dos cossenos: resultados de barreiras para outros 100 pares de pontos aleatórios, com latitudes e longitudes diferentes aleatoriamente em até 5 metros.
Isso mostra que a fórmula da lei dos cossenos é boa com 3 a 4 casas decimais quando a distância excede 5 a 10 metros. O número de casas decimais de precisão aumenta quadraticamente; assim, a 50-100 metros (uma ordem de magnitude), você obtém uma precisão de 5-6 dp (duas ordens de magnitude); a 500-1000 metros, você obtém 7-8 dp, etc.