Dados tres puntos o vectores en el plano: \begin{align} \vec a &= (a_x,a_y) \\ \vec b &= (b_x,b_x) \\ \vec c &= (c_x,c_y) \end{align} ¿Cómo se puede calcular $\lVert \vec c - \vec a \rVert - \lVert \vec b - \vec a \rVert$, es decir, "¿cuánto más lejos está de $\vec a$$\vec c$$\vec a$%#%"?
Por definición, todas las coordenadas y computatations en doble precisión IEEE754 aritmética de punto flotante. La respuesta debe ser razonablemente precisa, incluso si $\vec b$ es muy grande en comparación con $\vec a$$\vec b$.
Tenga en cuenta que la ingenua expresión $$ \sqrt{{(c_x-a_x)}^2+{(c_y-a_y)}^2} - \sqrt{{(b_x-a_x)}^2+{(b_y-a_y)}^2}, $$ mientras matemáticamente correcta, es adecuado para este cálculo porque catastróficamente cancela si $\vec c$ tiene una magnitud mucho mayor que $\vec a$$\vec b$.
Por ejemplo, si: \begin{align} \vec a &= (-10^{20},-10^{20}) \\ \vec b &= (0,0) \\ \vec c &= (1,1) \end{align} entonces la respuesta es $\vec c$, pero la computación ingenuamente producirá $\sqrt2$ debido a la catastrófica de la cancelación.