El problema está indicado por la palabra "bien condicionado". Es una cuestión de aritmética informática, no de matemáticas.
Aquí están los hechos básicos a considerar:
Un radián en la tierra abarca casi 10 ^ 7 metros.
La función coseno para argumentos x cerca de 0 es aproximadamente igual a 1 - x ^ 2/2.
El punto flotante de precisión doble tiene aproximadamente 15 dígitos decimales de precisión.
Los puntos (2) y (3) implican que cuando x es alrededor de un metro, o 10 ^ -7 radianes (punto 1), casi toda la precisión se pierde: 1 - (10 ^ -7) ^ 2 = 1 - 10 ^ - 14 es un cálculo en el que los primeros 14 de los 15 dígitos significativos se cancelan, dejando solo un dígito para representar el resultado. Darle la vuelta a esto (que es lo que hace el coseno inverso, "acos") significa que calcular acos para ángulos que corresponden a distancias de un metro no se puede hacer con una precisión significativa. (En ciertos casos graves, la pérdida de precisión da un valor donde ni siquiera se define acos, por lo que el código se descompondrá y no dará respuesta, una respuesta sin sentido o bloqueará la máquina). Consideraciones similares sugieren que debe evitar usar el coseno inverso si hay distancias de menos de unos cientos de metros, dependiendo de la precisión que esté dispuesto a perder.
El papel que juega acos en la ingenua fórmula de la ley del coseno es convertir un ángulo en una distancia. Atan2 desempeña ese papel en la fórmula de Haversine. La tangente de un ángulo pequeño x es aproximadamente igual a x misma. En consecuencia, la tangente inversa de un número, que es aproximadamente ese número, se calcula esencialmente sin pérdida de precisión. Es por eso que la fórmula de Haversine, aunque matemáticamente equivalente a la fórmula de la ley del coseno, es muy superior para distancias pequeñas (del orden de 1 metro o menos).
Aquí hay una comparación de las dos fórmulas usando 100 pares de puntos aleatorios en el globo (usando los cálculos de doble precisión de Mathematica).
Puede ver que para distancias de menos de aproximadamente 0.5 metros, las dos fórmulas divergen. Por encima de 0,5 metros tienden a estar de acuerdo. Para mostrar qué tan de acuerdo están, la siguiente gráfica muestra las relaciones de la ley de los cosenos: resultados de haversina para otros 100 pares de puntos aleatorios, con sus latitudes y longitudes que difieren aleatoriamente en hasta 5 metros.
Esto muestra que la fórmula de la ley del coseno es buena para 3-4 decimales una vez que la distancia excede los 5-10 metros. El número de lugares decimales de precisión aumenta cuadráticamente; así, a 50-100 metros (un orden de magnitud) obtienes una precisión de 5-6 dp (dos órdenes de magnitud); a 500-1000 metros obtienes 7-8 dp, etc.