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


8

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


2
Die Oktave scheint hauptsächlich für die numerische Analyse gedacht zu sein. Mathematica würde Ihnen definitiv eine bessere Antwort geben ...: P nur ein Scherz ... Versuchen Sie, nach einer symbolischen GNU-
Analyselösung zu

@ Giacomo: Das weiß ich. Ich frage mich nur, ob alle numerischen Analysesoftware eine solche Zahl ergibt oder nur GNU Octave.
Siyuan Ren

@Karsus Ren Dies ist eigentlich kein Software-Fehler, sondern ein Hardware-Fehler. Es ist eine inhärente Einschränkung, Ausdrücke mit irrationalen Zahlen auf Hardware mit einem begrenzten Speicherplatz für eine einzelne Zahl auszuwerten.
Durchbruch

Antworten:


8

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.


1
Ich brauche nur eine Bestätigung, dass dies das übliche Verhalten von Software für numerische Analysen ist.
Siyuan Ren

@Karsus Ren ist es tatsächlich Verhalten dieser Art von Software mit hoch genug Präzision . Ich weiß, dass dies nicht intuitiv zu sein scheint, aber Zahlen mit geringerer Genauigkeit geben diese Anomalien nicht so oft zurück. Weitere Informationen finden Sie in diesem Artikel von Microsoft. Beachten Sie jedoch, dass dieses Problem eine Kombination aus Quellcode und Compiler- / Zielarchitektur darstellt. Außerdem enthält dieser Wikipedia-Artikel einige gute Hintergrundinformationen zum Problem.
Durchbruch

1
Das zugrunde liegende Problem ist, dass die Oktavkonstante pinicht die mathematische Konstante ist π, sondern eine enge Gleitkomma-Annäherung daran. Die expFunktion fügt dem einen weiteren kleinen Fehler hinzu. Ein System, das mit symbolischen Ausdrücken arbeitet, könnte exp(i*pi)genau berechnen . Octave ist kein solches System.
Keith Thompson
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.