Comecei a aprender o GNU Octave hoje e tentei a primeira expressão dada no manual
exp(i*pi)
O resultado é
ans = -1.0000e+000 + 1.2246e-016i
E parece que a Biblioteca Científica GNU também fornece resultados semelhantes.
Então, isso é um bug do Octave ou problemas gerais do software de análise numérica (o software de avaliação simbólica definitivamente fornecerá uma resposta exata)?
Respostas:
Isso também não é um problema, mas devido à maneira como os computadores executam operações de ponto flutuante. Existe uma quantidade limitada de precisão com a qual qualquer computador pode operar e, por vezes, você verá anomalias como essa. Embora seja possível escrever um software capaz de lidar com isso, levaria muito mais tempo de computação e aumentaria drasticamente os requisitos de memória.
Se você olhar para ele, e ^ (i * pi) retorna -1 + 1,2x10 ^ -16i. Como você pode ver, o componente imaginário é extremamente pequeno (a maioria consideraria insignificante, uma vez que é 16 ordens de magnitude menor que a parte real). Esse componente é introduzido por erros de arredondamento e precisão, tanto no cálculo em si quanto no valor armazenado de pi, pois é irracional (veja este link para outro exemplo que trata de números irracionais).
Se esse erro de cálculo for inaceitável, procure pacotes matemáticos que executam análises simbólicas e não numéricas ou que usem números de ponto flutuante de alta precisão . A ressalva é que eles aumentarão drasticamente seus requisitos de memória e a análise simbólica geralmente é muito mais lenta. Além disso, números de precisão mais alta encolherão a magnitude dos erros de arredondamento / precisão, e não os eliminarão.
fonte
pi
não é a constante matemáticaπ
, mas uma aproximação aproximada de ponto flutuante a ela. Aexp
função adiciona outro pequeno erro a isso. Um sistema que trabalha com expressões simbólicas poderia calcularexp(i*pi)
exatamente; Oitava não é esse sistema.