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

8

Eu 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 GNU Scientific Library também dá resultados semelhantes.

Então, isso é um bug do Octave, ou problemas gerais de software de análise numérica (software de avaliação simbólica definitivamente dará uma resposta exata)?

    
por Siyuan Ren 27.07.2011 / 17:16

1 resposta

8

Este não é um bug, mas devido à maneira como os computadores executam operações de ponto flutuante. Há uma quantidade limitada de precisão com a qual qualquer computador pode operar, e assim, às vezes, você verá anomalias como essa. Embora seja possível escrever software que possa lidar com isso, seria necessário muito mais tempo de cálculo 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, já que ele é 16 vezes maior do que a parte real). Este componente é introduzido por erros de arredondamento e precisão, ambos com o próprio cálculo, bem como o valor armazenado de pi, uma vez que é irracional (consulte este link para outro exemplo que lida com números irracionais).

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

    
por 03.08.2011 / 15:30

Tags