Cuando $\cos(x)$ se calcula para una cantidad razonablemente pequeña de $x$ Se obtiene un número como 0,9999999994598649857etc; el estándar IEEE de doble precisión define una forma de redondear este número a aproximadamente 16 decimales. Así sale algo como 0,99999999999995. No he contado los dígitos, pero te haces una idea (y de todos modos, el redondeo se hace en base 2). Esto no parece catastrófico. Pero ahora reste 1 a ambos números, y verá que un enorme error relativo se ha comprometido a ese resultado. La división por $x^2$ le da más o menos este error relativo, porque cuando $x$ es pequeño, entonces $\cos(x) \approx 1 - \frac12 x^2$ (según Serie Taylor ). Así que cuando $x$ es muy pequeño, $\cos(x)$ se redondea a 1 (sin dígitos después de la coma), lo que explica la meseta en su gráfico.
Seguimiento de la petición de la OP: Para formalizar esto, dejemos $fl$ para "aritmética de punto flotante", sea la función que redondea un número real al número máquina más cercano ( $=$ un número representable como número IEEE de doble precisión, de los que sólo hay un número finito). Aunque tal vez no sea estrictamente preciso (puede haber optimización; puede haber cálculo de precisión extendida oculto; y el redondeo no siempre es al número más cercano de la máquina), la máquina calcula no $(1 - \cos(x)) / x^2$ pero $$ fl( fl( 1 - {\color{red}{fl}}(\cos(x)) ) / fl(x^2) ) , $$ Suponiendo que se comience con $x$ tal que $x = fl(x)$ . La cuestión se origina en la aplicación de la $fl$ que está marcado en rojo, porque $$ {\color{red}{fl}}(\cos(x)) = \cos(x) (1 + \delta) $$ donde $|\delta| \leq \text{eps} \approx 10^{-16}$ , y $\text{eps}$ es el menor número positivo tal que $$ fl(1 + \text{eps}) \neq 1 . $$ Por lo tanto, $$ 1 - {\color{red}{fl}}(\cos(x)) = 1 - \cos(x) + \delta \cos(x) \approx \tfrac12 x^2 + \delta $$ cuando $x$ no es demasiado pequeño (de lo contrario ${\color{red}{fl}}(\cos(x)) = 1$ ). Cuando $x$ es de orden $\sqrt{\text{eps}} \approx 10^{-8}$ (como en su imagen), este resultado $\tfrac12 x^2$ está contaminado por un error absoluto de $\delta$ o un error relativo de $2 \delta / x^2$ . Así que el resultado final $(1 - \cos(x)) / x^2$ está contaminado por un error absoluto de $\delta / x^2 \approx 1$ cuando $x \approx \sqrt{\text{eps}}$ que, de nuevo, es lo que se ve en la imagen.
ps. Ha habido consecuencias infames de la aritmética de precisión finita.
2 votos
Si se traza $1 - \cos x$ en el mismo rango de $x$ No verás la cancelación porque es de orden $x^2$ alrededor del origen.
0 votos
Para que nadie sospeche, como hice yo, que esto era un artefacto del programa de trazado utilizado, aquí está el mismo resultado extraño procedente de (lo que espero que sea) un programa de trazado completamente diferente: a.pomf.se/inobme.png
0 votos
Esta pregunta relacionada parece sugerir que bajo algunas condiciones el mismo problema puede se producen con $1-\cos x$ .
10 votos
Sospecho que la máquina quería castigarte por haber utilizado la Comic Sans. ;-)
0 votos
Veo lo mismo en R. Esto apoya la idea de que esto es un problema con los números de punto flotante.
0 votos
@MichaelLugo Sé que se trata de un problema de punto flotante (de hecho, el nombre es "cancelación catastrófica", no es un nombre que me invente). Le pedía a SE que me ayudara a entender este problema conocido.
0 votos
En la actualidad, el redondeo es la única forma viable de calcular, por ejemplo, matrices grandes sobre los reales (por ejemplo, multiplicación matriz-matriz, solución de sistemas lineales grandes). Desde este punto de vista, no es un problema o una cuestión, sino una solución a un problema que resulta tener efectos secundarios. El ejemplo $(1-\cos(x))/x^2$ pretende ilustrar una de ellas.
0 votos
Wolfram|α hace exactamente lo mismo .