El problema lo indica la palabra "bien acondicionado". Es una cuestión de aritmética informática, no de matemáticas.
Estos son los datos básicos que hay que tener en cuenta:
-
Un radián en la tierra abarca casi 10^7 metros.
-
La función coseno para los argumentos x cerca de 0 es aproximadamente igual a 1 - x ^2/2.
-
La coma flotante de doble precisión tiene unos 15 dígitos decimales de precisión.
Los puntos (2) y (3) implican que cuando x es de alrededor de un metro, o 10^-7 radianes (punto 1), se pierde casi toda la precisión: 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 todos, dejando sólo un dígito para representar el resultado. Si se invierte esto (que es lo que hace el coseno inverso, "acos") significa que El cálculo de acos para ángulos que corresponden a distancias de un metro no puede hacerse con una precisión significativa. (En algunos casos malos, la pérdida de precisión da un valor en el que acos ni siquiera está definido, por lo que el código se estropeará y no dará ninguna respuesta, una respuesta sin sentido o hará que la máquina se bloquee). Consideraciones similares sugieren que debería evitar el uso del coseno inverso si se trata de distancias inferiores a unos cientos de metros, dependiendo de la precisión que esté dispuesto a perder.
El papel que desempeña acos en la fórmula ingenua de la ley de los cosenos es convertir un ángulo en una distancia. Ese papel lo desempeña atan2 en la fórmula del haversino. La tangente de un ángulo pequeño x es aproximadamente igual a x mismo. En consecuencia, la tangente inversa de un número, al ser aproximadamente ese número, se calcula esencialmente sin pérdida de precisión. Por ello, la fórmula del haversino, aunque es matemáticamente equivalente a la fórmula de la ley de los cosenos, es muy superior para distancias pequeñas (del orden de 1 metro o menos).
He aquí una comparación de las dos fórmulas utilizando 100 pares de puntos aleatorios en el globo terráqueo (utilizando los cálculos de doble precisión de Mathematica).
Puedes ver que para distancias inferiores a unos 0,5 metros, las dos fórmulas divergen. Por encima de 0,5 metros tienden a coincidir. Para mostrar lo mucho que coinciden, el siguiente gráfico muestra las relaciones de la ley de los cosenos:resultados del haversino para otros 100 pares de puntos aleatorios, con sus latitudes y longitudes que difieren aleatoriamente hasta 5 metros.
Esto demuestra que la fórmula de la ley de los cosenos es buena hasta 3-4 decimales una vez que la distancia supera los 5-10 metros. El número de decimales de precisión aumenta cuadráticamente; así, a 50-100 metros (un orden de magnitud) se obtiene una precisión de 5-6 dp (dos órdenes de magnitud); a 500-1000 metros se obtienen 7-8 dp, etc.