¿Por qué la expresión exp(i*pi) devuelve un resultado incorrecto en GNU Octave?

¿Por qué la expresión exp(i*pi) devuelve un resultado incorrecto en GNU Octave?

Empecé a aprender GNU Octave hoy y probé la primera expresión que aparece en el manual.

exp(i*pi)

El resultado es

ans = -1.0000e+000 + 1.2246e-016i

Y parece que la Biblioteca Científica GNU también ofrece resultados similares.

Entonces, ¿se trata de un error de Octave o de problemas generales del software de análisis numérico (el software de evaluación simbólica definitivamente dará una respuesta exacta)?

Respuesta1

Esto no es un error de ninguno de los dos, sino que se debe a la forma en que las computadoras realizan operaciones de punto flotante. Hay una cantidad limitada de precisión con la que cualquier computadora puede operar, por lo que a veces verás anomalías como esta. Si bien es posible escribir software que pueda manejar esto, requeriría mucho más tiempo de cálculo y aumentaría drásticamente los requisitos de memoria.

Si nos fijamos, e^(i*pi) devuelve -1 + 1,2x10^-16i. Como puede ver, la componente imaginaria es extremadamente pequeña (la mayoría la consideraría insignificante, ya que es 16 órdenes de magnitud más pequeña que la parte real). Este componente se introduce por errores de redondeo y precisión, tanto en el cálculo en sí, como en el valor almacenado de pi ya que es irracional (vereste enlace(para ver otro ejemplo relacionado con números irracionales).

Si este error de cálculo es inaceptable, debería buscar paquetes matemáticos que realicen análisis simbólicos en lugar de numéricos, o aquellos que utilicennúmeros de punto flotante de alta precisión. Las advertencias de estos son que aumentarán drásticamente sus necesidades de memoria y el análisis simbólico suele ser mucho más lento. Además, los números de mayor precisión simplemente reducirán la magnitud de los errores de redondeo/precisión,noeliminarlos.

información relacionada