std::log(std::complex)
| Definiert in der Header-Datei <complex> |
||
| template< class T > std::complex<T> log( const std::complex<T>& z ); |
||
Berechnet den komplexen natürlichen (Basis e) Logarithmus eines komplexen Wertes z mit einem Zweigschnitt entlang der negativen reellen Achse.
Inhalt |
[edit] Parameter
| z | - | komplexer Wert |
[edit] Rückgabewert
Wenn keine Fehler auftreten, wird der komplexe natürliche Logarithmus von z zurückgegeben, im Bereich eines Streifens im Intervall [−iπ, +iπ] entlang der imaginären Achse und mathematisch unbeschränkt entlang der reellen Achse.
[edit] Fehlerbehandlung und Sonderwerte
Fehler werden konsistent mit math_errhandling gemeldet.
Wenn die Implementierung IEEE-Gleitkomma-Arithmetik unterstützt,
- Die Funktion ist kontinuierlich auf dem Schnitt, unter Berücksichtigung des Vorzeichens des Imaginärteils
- std::log(std::conj(z)) == std::conj(std::log(z))
- Wenn z
(-0,+0)ist, ist das Ergebnis(-∞,π)und FE_DIVBYZERO wird ausgelöst. - Wenn z
(+0,+0)ist, ist das Ergebnis(-∞,+0)und FE_DIVBYZERO wird ausgelöst. - Wenn z
(x,+∞)ist (für jedes endliche x), ist das Ergebnis(+∞,π/2). - Wenn z
(x,NaN)ist (für jedes endliche x), ist das Ergebnis(NaN,NaN)und FE_INVALID kann ausgelöst werden. - Wenn z
(-∞,y)ist (für jedes endliche positive y), ist das Ergebnis(+∞,π). - Wenn z
(+∞,y)ist (für jedes endliche positive y), ist das Ergebnis(+∞,+0). - Wenn z
(-∞,+∞)ist, ist das Ergebnis(+∞,3π/4). - Wenn z
(+∞,+∞)ist, ist das Ergebnis(+∞,π/4). - Wenn z
(±∞,NaN)ist, ist das Ergebnis(+∞,NaN). - Wenn z
(NaN,y)ist (für jedes endliche y), ist das Ergebnis(NaN,NaN)und FE_INVALID kann ausgelöst werden. - Wenn z
(NaN,+∞)ist, ist das Ergebnis(+∞,NaN). - Wenn z
(NaN,NaN)ist, ist das Ergebnis(NaN,NaN)
[edit] Hinweise
Der natürliche Logarithmus einer komplexen Zahl z mit den Polarkoordinatenkomponenten (r,θ) ist gleich ln r + i(θ+2nπ), wobei der Hauptwert ln r + iθ ist.
Die Semantik dieser Funktion soll mit der C-Funktion clog konsistent sein.
[edit] Beispiel
#include <cmath> #include <complex> #include <iostream> int main() { std::complex<double> z {0.0, 1.0}; // r = 1, θ = pi / 2 std::cout << "2 * log" << z << " = " << 2.0 * std::log(z) << '\n'; std::complex<double> z2 {sqrt(2.0) / 2, sqrt(2.0) / 2}; // r = 1, θ = pi / 4 std::cout << "4 * log" << z2 << " = " << 4.0 * std::log(z2) << '\n'; std::complex<double> z3 {-1.0, 0.0}; // r = 1, θ = pi std::cout << "log" << z3 << " = " << std::log(z3) << '\n'; std::complex<double> z4 {-1.0, -0.0}; // the other side of the cut std::cout << "log" << z4 << " (the other side of the cut) = " << std::log(z4) << '\n'; }
Mögliche Ausgabe
2 * log(0,1) = (0,3.14159) 4 * log(0.707107,0.707107) = (0,3.14159) log(-1,0) = (0,3.14159) log(-1,-0) (the other side of the cut) = (0,-3.14159)
[edit] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2597 | C++98 | Spezifikation behandelt vorzeichenbehaftete Null-Imaginärteile fehlerhaft | fehlerhafte Anforderung entfernt |
[edit] Siehe auch
| komplexer gemeinsamer Logarithmus mit dem Schnitt entlang der negativen reellen Achse (function template) | |
| komplexer Basis-e-Exponentialwert (function template) | |
| (C++11)(C++11) |
berechnet den natürlichen (Basis e) Logarithmus (ln(x)) (Funktion) |
| wendet die Funktion std::log auf jedes Element des Valarrays an (function template) | |
| C-Dokumentation für clog
| |