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)?
Respuestas:
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.
fuente
pi
no es la constante matemáticaπ
, sino una aproximación cercana al punto flotante. Laexp
función agrega otro pequeño error a eso. Un sistema que funciona con expresiones simbólicas podría calcularexp(i*pi)
exactamente; Octave no es tal sistema.