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


8

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)?


2
Parece que a oitava se destina principalmente à análise numérica. Mathematica com certeza gostaria de lhe dar uma resposta melhor ...: P apenas brincando ... Tente pesquisar por uma solução de análise simbólica GNU
GD1

@ Giacomo: Eu sei disso. Eu me pergunto se todo software analítico numérico é avaliado para esse número ou apenas o GNU Octave.
Siyuan Ren 27/07

@ Karsus Ren, este não é realmente um bug de software, mas de hardware. É uma limitação inerente de tentar avaliar expressões com números irracionais no hardware com uma quantidade limitada de armazenamento para um único número.
Breakthrough

Respostas:


8

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.


1
Eu só preciso de uma confirmação de que esse é o comportamento comum do software de análise numérica.
Siyuan Ren

@ Karsus Ren, na verdade, é um comportamento desse tipo de software com alta precisão . Sei que isso parece contra-intuitivo, mas números de menor precisão não retornam essas anomalias com tanta frequência. Consulte este artigo da Microsoft para obter mais detalhes, mas lembre-se de que esse problema é uma combinação do código-fonte e da arquitetura do compilador / destino. Além disso, este artigo da Wikipedia tem algumas boas informações básicas sobre o problema.
Breakthrough

1
O problema subjacente é que a constante do Octave pinão é a constante matemática π, mas uma aproximação aproximada de ponto flutuante a ela. A expfunção adiciona outro pequeno erro a isso. Um sistema que trabalha com expressões simbólicas poderia calcular exp(i*pi)exatamente; Oitava não é esse sistema.
Keith Thompson
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.