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


8

Hoy comencé a aprender GNU Octave y probé la primera expresión dada 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 da resultados similares.

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


2
Parece que la octava está destinada principalmente para el análisis numérico. Mathematica definitivamente le daría una mejor respuesta ...: P solo bromeando ... Intente buscar una solución de análisis simbólico GNU
gd1

@Giacomo: lo sé. Solo me pregunto si todo el software de análisis numérico se evalúa a ese número, o solo GNU Octave.
Siyuan Ren

@Karsus Ren esto no es realmente un error de software, sino uno de hardware. Es una limitación inherente tratar de evaluar expresiones con números irracionales en hardware con una cantidad limitada de almacenamiento para un solo número.
Avance

Respuestas:


8

Esto tampoco es un error, pero debido 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á anomalías como esta. Si bien es posible escribir software que pueda manejar esto, tomaría mucho más tiempo de cálculo y aumentaría drásticamente los requisitos de memoria.

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

Si este error de cálculo es inaceptable, debe buscar paquetes matemáticos que realicen análisis simbólicos en lugar de numéricos, o que utilicen números de punto flotante de alta precisión . Las advertencias de estos son que aumentarán drásticamente sus requisitos de memoria, y el análisis simbólico es a menudo 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, no los eliminarán.


1
Solo necesito una confirmación de que este es el comportamiento común del software de análisis numérico.
Siyuan Ren el

@Karsus Ren es en realidad el comportamiento de este tipo de software con una precisión suficientemente alta . Sé que parece contrario a la intuición, pero los números de precisión más bajos no devuelven estas anomalías con tanta frecuencia. Consulte este artículo de Microsoft para obtener más detalles, pero recuerde que este problema es una combinación del código fuente y la arquitectura del compilador / destino. Además, este artículo de Wikipedia tiene buena información general sobre el problema.
Avance el

1
El problema subyacente es que la constante de Octave pino es la constante matemática π, sino una aproximación cercana al punto flotante. La expfunción agrega otro pequeño error a eso. Un sistema que funciona con expresiones simbólicas podría calcular exp(i*pi)exactamente; Octave no es tal sistema.
Keith Thompson
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.