Warum gibt der Ausdruck exp(i*pi) in GNU Octave das falsche Ergebnis zurück?

Warum gibt der Ausdruck exp(i*pi) in GNU Octave das falsche Ergebnis zurück?

Ich habe heute angefangen, GNU Octave zu lernen, und habe den ersten Ausdruck im Handbuch ausprobiert

exp(i*pi)

Das Ergebnis ist

ans = -1.0000e+000 + 1.2246e-016i

Und es scheint, dass auch die GNU Scientific Library ähnliche Ergebnisse liefert.

Handelt es sich hier also um einen Octave-Fehler oder um allgemeine Probleme von Software zur numerischen Analyse (Software zur symbolischen Auswertung liefert auf jeden Fall eine exakte Antwort)?

Antwort1

Dies ist kein Fehler, sondern liegt an der Art und Weise, wie Computer Gleitkommaoperationen ausführen. Die Genauigkeit, mit der ein Computer arbeiten kann, ist begrenzt, daher treten manchmal Anomalien wie diese auf. Es ist zwar möglich, Software zu schreiben, die damit umgehen kann, aber dies würde viel mehr Rechenzeit in Anspruch nehmen und den Speicherbedarf drastisch erhöhen.

Wenn Sie es sich ansehen, ergibt e^(i*pi) -1 + 1,2x10^-16i. Wie Sie sehen, ist der Imaginärteil extrem klein (die meisten würden ihn als vernachlässigbar betrachten, da er 16 Größenordnungen kleiner ist als der Realteil). Dieser Teil entsteht durch Rundungs- und Präzisionsfehler, sowohl bei der Berechnung selbst als auch beim gespeicherten Wert von Pi, da dieser irrational ist (siehedieser Linkfür ein weiteres Beispiel, das sich mit irrationalen Zahlen beschäftigt).

Wenn dieser Rechenfehler nicht akzeptabel ist, sollten Sie sich Mathematikpakete ansehen, die symbolische statt numerische Analysen durchführen, oder solche, diehochpräzise Gleitkommazahlen. Die Nachteile dabei sind, dass sie Ihren Speicherbedarf drastisch erhöhen und die symbolische Analyse oft viel langsamer ist. Außerdem verringern Zahlen mit höherer Genauigkeit nur die Größe der Rundungs-/Präzisionsfehler.nichtbeseitigen Sie sie.

verwandte Informationen