Suponga que $x$, $y$ son exactos y $x\approx y$. Sea $z$ denote $(x-y)/y$ y sea $z^{*} = \text{fl}((x-y)/y)$ el valor computado de $z$. Como $x-y$ se puede calcular sin ningún error (por el lema de Sterbenz como se señaló en un comentario), $z^{*} = z\times(1+\alpha_1\delta_1)$, donde $|\delta_1|\leq \varepsilon$, $\varepsilon$ es la precisión de la máquina y $\alpha_1$ es la precisión de la división de punto flotante, usualmente $\alpha_1 = 1/2$.
Sea $\text{log1p}(x) = \text{ln}(1+x)$ y sea $\overset{\sim}{\text{log1p}}(x)$ el valor computado de $\text{log1p}(x)$.
Tenemos $\overset{\sim}{\text{log1p}}(z^{*}) = \text{log1p}(z^*)\times(1+\alpha_2\delta_2)$, donde $|\delta_2|\leq \varepsilon$, y $\alpha_2$ es la precisión de la función $\text{log1p}$.
Así: $$\overset{\sim}{\text{log1p}}(z^{*}) = \text{log1p}((1+\alpha_1\delta_1)z)\times(1+\alpha_2\delta_2) = \text{log1p}(z)\times(1+\text{cond}(\text{log1p}, z)\alpha_1\delta_1)\times(1+\alpha_2\delta_2) + O(\varepsilon^2) = \text{log1p}(z)\times(1+\text{cond}(\text{log1p}, z)\alpha_1\delta_1+\alpha_2\delta_2) + O(\varepsilon^2)$$ donde el número de condición de la función $\text{log1p}$ es $$\text{cond}(\text{log1p}, z) = \frac{z}{\text{ln}(z + 1)\times(z + 1)}$$ y para $z\approx 0$, $\text{cond}(\text{log1p}, z)= 1 - \frac{1}{2}z + O(z^2) \approx 1$. Esto muestra que el error relativo hacia adelante para $x\approx y$: $$\left|\frac{\overset{\sim}{\text{log1p}}(z^{*}) - \text{log1p}(z)}{\text{log1p}(z)}\right| \lesssim (\alpha_1 + \alpha_2)\varepsilon$$ es pequeño y muy cercano a la precisión de la función $\text{log1p}$.
Observa que no se puede usar $\text{ln}(1+z)$ en lugar de $\text{log1p}(z)$, debido al enorme número de condición de $\text{ln}(1+z)$ para $z\approx 0$.
Si $x$ o $y$ no son exactos, entonces también debemos tener en cuenta el número de condición de la función $\text{ln}(x)- \text{ln}(y)$. Como observaste, este número de condición es muy alto para $x\approx y$. En este caso es imposible obtener un algoritmo preciso para calcular esta función, y la única solución es usar aritmética de alta precisión.
0 votos
Desafortunadamente, también hay cancelación al calcular $x-y$
1 votos
Es posible que encuentres este artículo sobre diferencias divididas de interés.
2 votos
@hagen-von-eitzen: Si $ x \approx y $ o en general si $ y/2 \le x \le y, $ entonces según el lema de Sterbenz la diferencia de punto flotante será exacta (si no ocurre subdesbordamiento).