std::exp(std::complex)
| Definiert in der Header-Datei <complex> |
||
| template< class T > std::complex<T> exp( const std::complex<T>& z ); |
||
Berechnet den Eulerschen Zahl-Exponentialwert von z, d.h. e (Eulersche Zahl, 2.7182818) hoch die z-Potenz.
Inhalt |
[bearbeiten] Parameter
| z | - | komplexer Wert |
[bearbeiten] Rückgabewert
Wenn keine Fehler auftreten, wird e hoch die Potenz z, ez
, zurückgegeben.
[bearbeiten] Fehlerbehandlung und Sonderwerte
Fehler werden konsistent mit math_errhandling gemeldet.
Wenn die Implementierung IEEE-Gleitkomma-Arithmetik unterstützt,
- std::exp(std::conj(z)) == std::conj(std::exp(z))
- Wenn z
(±0,+0)ist, ist das Ergebnis(1,+0) - Wenn z
(x,+∞)ist (für ein beliebiges endliches x), ist das Ergebnis(NaN,NaN)und FE_INVALID wird ausgelöst. - Wenn z
(x,NaN)ist (für ein beliebiges endliches x), ist das Ergebnis(NaN,NaN)und FE_INVALID kann ausgelöst werden. - Wenn z
(+∞,+0)ist, ist das Ergebnis(+∞,+0) - Wenn z
(-∞,y)ist (für ein beliebiges endliches y), ist das Ergebnis+0cis(y) - Wenn z
(+∞,y)ist (für ein beliebiges endliches, von Null verschiedenes y), ist das Ergebnis+∞cis(y) - Wenn z
(-∞,+∞)ist, ist das Ergebnis(±0,±0)(Vorzeichen sind nicht spezifiziert) - Wenn z
(+∞,+∞)ist, ist das Ergebnis(±∞,NaN)und FE_INVALID wird ausgelöst (das Vorzeichen des Realteils ist nicht spezifiziert) - Wenn z
(-∞,NaN)ist, ist das Ergebnis(±0,±0)(Vorzeichen sind nicht spezifiziert) - Wenn z
(+∞,NaN)ist, ist das Ergebnis(±∞,NaN)(das Vorzeichen des Realteils ist nicht spezifiziert) - Wenn z
(NaN,+0)ist, ist das Ergebnis(NaN,+0) - Wenn z
(NaN,y)ist (für ein beliebiges von Null verschiedenes y), ist das Ergebnis(NaN,NaN)und FE_INVALID kann ausgelöst werden - Wenn z
(NaN,NaN)ist, ist das Ergebnis(NaN,NaN)
wobei cis(y) cos(y) + i sin(y) ist.
[bearbeiten] Anmerkungen
Die komplexe Exponentialfunktion ez
für z = x+iy ist gleich ex
cis(y) oder ex
(cos(y) + i sin(y)).
Die Exponentialfunktion ist eine ganze Funktion in der komplexen Ebene und hat keine Schnitte.
Die folgenden Ausdrücke ergeben äquivalente Ergebnisse, wenn der Realteil 0 ist:
- std::exp(std::complex<float>(0, theta))
- std::complex<float>(cosf(theta), sinf(theta))
- std::polar(1.f, theta)
In diesem Fall kann exp etwa 4,5x langsamer sein. Eine der anderen Formen sollte anstelle des Aufrufs von exp mit einem Argument verwendet werden, dessen Realteil literales 0 ist. Es gibt jedoch keinen Vorteil, eine Laufzeitprüfung von z.real() == 0 zu vermeiden, um exp zu umgehen.
[bearbeiten] Beispiel
#include <cmath> #include <complex> #include <iostream> int main() { const double pi = std::acos(-1.0); const std::complex<double> i(0.0, 1.0); std::cout << std::fixed << " exp(i * pi) = " << std::exp(i * pi) << '\n'; }
Ausgabe
exp(i * pi) = (-1.000000,0.000000)
[bearbeiten] Siehe auch
| komplexer natürlicher Logarithmus mit dem Schnitt entlang der negativen reellen Achse (function template) | |
| (C++11)(C++11) |
gibt e hoch der gegebenen Potenz zurück (ex) (Funktion) |
| wendet die Funktion std::exp auf jedes Element des Valarrays an (function template) | |
| konstruiert eine komplexe Zahl aus Betrag und Phasenwinkel (function template) | |
| C-Dokumentation für cexp
| |