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 die GNU Scientific Library ähnliche Ergebnisse liefert.
Handelt es sich also um einen Octave-Fehler oder um allgemeine Probleme mit numerischer Analyse-Software (symbolische Auswertungssoftware gibt definitiv eine Antwort von genau einer)?
Antworten:
Dies ist auch kein Fehler, aber aufgrund der Art und Weise, wie Computer Gleitkommaoperationen ausführen. Es gibt eine begrenzte Genauigkeit, mit der jeder Computer arbeiten kann, und daher werden Sie manchmal solche Anomalien feststellen. Es ist zwar möglich, Software zu schreiben, die damit umgehen kann, dies würde jedoch viel mehr Rechenzeit in Anspruch nehmen und den Speicherbedarf drastisch erhöhen.
Wenn Sie es betrachten, gibt e ^ (i * pi) -1 + 1,2x10 ^ -16i zurück. Wie Sie sehen können, ist die imaginäre Komponente extrem klein (die meisten würden sie für vernachlässigbar halten, da sie 16 Größenordnungen kleiner ist als der Realteil). Diese Komponente wird durch Rundungs- und Präzisionsfehler sowohl bei der Berechnung selbst als auch beim gespeicherten Wert von pi eingeführt, da dieser irrational ist (siehe diesen Link für ein weiteres Beispiel, das sich mit irrationalen Zahlen befasst).
Wenn dieser Berechnungsfehler nicht akzeptabel ist, sollten Sie sich Mathematikpakete ansehen, die eher symbolische als numerische Analysen durchführen, oder solche, die hochpräzise Gleitkommazahlen verwenden . Die Vorbehalte dabei sind, dass sie Ihren Speicherbedarf drastisch erhöhen und die symbolische Analyse oft viel langsamer ist. Auch Zahlen höherer Genauigkeit wird nur die Größe der Rundung / Präzisionsfehler schrumpfen, nicht zu beseitigen.
quelle
pi
nicht die mathematische Konstante istπ
, sondern eine enge Gleitkomma-Annäherung daran. Dieexp
Funktion fügt dem einen weiteren kleinen Fehler hinzu. Ein System, das mit symbolischen Ausdrücken arbeitet, könnteexp(i*pi)
genau berechnen . Octave ist kein solches System.