Por que a expressão exp(i*pi) retorna o resultado errado no GNU Octave?

Por que a expressão exp(i*pi) retorna o resultado errado no GNU Octave?

Comecei a aprender 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 de software de análise numérica (o software de avaliação simbólica certamente dará uma resposta exata)?

Responder1

Isso também não é um bug, mas devido à maneira como os computadores executam operações de ponto flutuante. Há uma precisão limitada com a qual qualquer computador pode operar e, portanto, às vezes você verá anomalias como essa. Embora seja possível escrever software que possa 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, a componente imaginária é extremamente pequena (a maioria a consideraria insignificante, já que é 16 ordens de grandeza menor que a parte real). Esta componente é introduzida por erros de arredondamento e precisão, tanto no cálculo em si, como no valor armazenado de pi, uma vez que é irracional (veresse linkpara outro exemplo lidando com números irracionais).

Se este erro de cálculo for inaceitável, você deve procurar pacotes matemáticos que realizam análises simbólicas em vez de numéricas, ou aqueles que usamnúmeros de ponto flutuante de alta precisão. As advertências são que aumentarão drasticamente os requisitos de memória e a análise simbólica costuma ser muito mais lenta. Além disso, números de maior precisão apenas diminuirão a magnitude dos erros de arredondamento/precisão,nãoeliminá-los.

informação relacionada