std:: complex
|
Definiert im Header
<complex>
|
||
|
template
<
class
T
>
class complex ; |
(1) | |
|
template
<>
class
complex
<
float
>
;
|
(2) | (bis C++23) |
|
template
<>
class
complex
<
double
>
;
|
(3) | (bis C++23) |
|
template
<>
class
complex
<
long
double
>
;
|
(4) | (bis C++23) |
Spezialisierungen von
std::complex
für cv-unqualifizierte
Standard
(bis C++23)
Gleitkommatypen
sind
TriviallyCopyable
(seit C++23)
LiteralType
s
zur Darstellung und Manipulation von
komplexen Zahlen
.
Inhaltsverzeichnis |
Template-Parameter
| T | - |
der Typ der Real- und Imaginärteile. Das Verhalten ist nicht spezifiziert (und kann die Kompilierung fehlschlagen), wenn
T
kein cv-unqualifizierter
Standard
(bis C++23)
Gleitkommatyp ist, und undefiniert, wenn
T
kein
NumericType
ist.
|
Mitgliedstypen
| Membertyp | Definition |
value_type
|
T
|
Memberfunktionen
|
Konstruiert eine komplexe Zahl
(öffentliche Elementfunktion) |
|
|
weist Inhalte zu
(öffentliche Elementfunktion) |
|
|
greift auf den Realteil der komplexen Zahl zu
(öffentliche Elementfunktion) |
|
|
greift auf den Imaginärteil der komplexen Zahl zu
(öffentliche Elementfunktion) |
|
|
zusammengesetzte Zuweisung zweier komplexer Zahlen oder einer komplexen Zahl und eines Skalars
(öffentliche Elementfunktion) |
Nicht-Member-Funktionen
|
wendet unäre Operatoren auf komplexe Zahlen an
(Funktionsschablone) |
|
|
führt arithmetische Operationen für komplexe Zahlen auf zwei komplexen Werten oder einem komplexen Wert und einem Skalar durch
(Funktionsschablone) |
|
|
(removed in C++20)
|
vergleicht zwei komplexe Zahlen oder eine komplexe Zahl und einen Skalar
(Funktions-Template) |
|
serialisiert und deserialisiert eine komplexe Zahl
(Funktions-Template) |
|
|
(C++26)
|
erhält eine Referenz auf den Real- oder Imaginärteil eines
std::complex
(Funktions-Template) |
|
gibt den Realteil zurück
(Funktionsschablone) |
|
|
gibt den Imaginärteil zurück
(Funktionsschablone) |
|
|
gibt den Betrag einer komplexen Zahl zurück
(Funktions-Template) |
|
|
gibt den Phasenwinkel zurück
(Funktionsschablone) |
|
|
gibt den quadrierten Betrag zurück
(Funktions-Template) |
|
|
gibt die komplex Konjugierte zurück
(Funktions-Template) |
|
|
(C++11)
|
gibt die Projektion auf die Riemannsche Zahlenkugel zurück
(Funktionsschablone) |
|
Erstellt eine komplexe Zahl aus Betrag und Phasenwinkel
(Funktions-Template) |
|
Exponentialfunktionen |
|
|
Komplexe Basis-
e
-Exponentialfunktion
(Funktionsschablone) |
|
|
Komplexer natürlicher Logarithmus mit den Verzweigungsschnitten entlang der negativen reellen Achse
(Funktions-Template) |
|
|
Komplexer dekadischer Logarithmus mit den Verzweigungsschnitten entlang der negativen reellen Achse
(Funktionstemplate) |
|
Potenzfunktionen |
|
|
Komplexe Potenz, ein oder beide Argumente können eine komplexe Zahl sein
(Funktionsschablone) |
|
|
Komplexe Quadratwurzel im Bereich der rechten Halbebene
(Funktions-Template) |
|
Trigonometrische Funktionen |
|
|
berechnet den Sinus einer komplexen Zahl (
sin(z)
)
(Funktions-Template) |
|
|
berechnet den Kosinus einer komplexen Zahl (
cos(z)
)
(Funktions-Template) |
|
|
berechnet den Tangens einer komplexen Zahl (
tan(z)
)
(Funktions-Template) |
|
|
(C++11)
|
berechnet den Arkussinus einer komplexen Zahl (
arcsin(z)
)
(Funktionsschablone) |
|
(C++11)
|
berechnet den Arkuskosinus einer komplexen Zahl (
arccos(z)
)
(Funktionsschablone) |
|
(C++11)
|
berechnet den Arkustangens einer komplexen Zahl (
arctan(z)
)
(Funktionsschablone) |
Hyperbelfunktionen |
|
|
berechnet den hyperbolischen Sinus einer komplexen Zahl (
sinh(z)
)
(Funktions-Template) |
|
|
berechnet den hyperbolischen Kosinus einer komplexen Zahl (
cosh(z)
)
(Funktionsschablone) |
|
|
berechnet den hyperbolischen Tangens einer komplexen Zahl (
tanh(z)
)
(Funktions-Template) |
|
|
(C++11)
|
berechnet den Flächenhyperbelsinus einer komplexen Zahl (
arsinh(z)
)
(Funktionsschablone) |
|
(C++11)
|
berechnet den Flächenhyperbelkosinus einer komplexen Zahl (
arcosh(z)
)
(Funktionsschablone) |
|
(C++11)
|
berechnet den Flächenhyperbeltangens einer komplexen Zahl (
artanh(z)
)
(Funktionsschablone) |
Hilfstypen
|
(C++26)
|
ermittelt die Größe eines
std::complex
(Klassen-Template-Spezialisierung) |
|
ermittelt den zugrundeliegenden Real- und Imaginärzahl-Typ eines
std::complex
(Klassen-Template-Spezialisierung) |
Array-orientierter Zugriff
Für jedes Objekt
z
vom Typ
std::complex<T>
,
reinterpret_cast
<
T
(
&
)
[
2
]
>
(
z
)
[
0
]
der Realteil von
z
und
reinterpret_cast
<
T
(
&
)
[
2
]
>
(
z
)
[
1
]
der Imaginärteil von
z
ist.
Für jeden Zeiger auf ein Element eines Arrays von
std::complex<T>
namens
p
und jeden gültigen Array-Index
i
,
reinterpret_cast
<
T
*
>
(
p
)
[
2
*
i
]
der Realteil der komplexen Zahl
p
[
i
]
, und
reinterpret_cast
<
T
*
>
(
p
)
[
2
*
i
+
1
]
der Imaginärteil der komplexen Zahl
p
[
i
]
ist.
Die Absicht dieser Anforderung ist es, die binäre Kompatibilität zwischen den komplexen Zahlentypen der C++-Bibliothek und den komplexen Zahlentypen der C-Sprache (und Arrays davon) zu bewahren, welche eine identische Objektdarstellungsanforderung haben.
Implementierungshinweise
Um den Anforderungen des array-orientierten Zugriffs zu genügen, ist eine Implementierung gezwungen, die Real- und Imaginärteile einer
std::complex
Spezialisierung in separaten und benachbarten Speicherbereichen zu speichern. Mögliche Deklarationen für ihre nicht-statischen Datenelemente umfassen:
-
ein Array vom Typ
value_type[2], wobei das erste Element den Realteil und das zweite Element den Imaginärteil enthält (z.B. Microsoft Visual Studio); -
ein einzelnes Element vom Typ
value_type _Complex(das den entsprechenden C-Sprache komplexen Zahlentyp kapselt) (z.B. GNU libstdc++); -
zwei Elemente vom Typ
value_type, mit gleichem Elementzugriff, die jeweils den Real- und Imaginärteil enthalten (z.B. LLVM libc++).
Eine Implementierung darf keine zusätzlichen nicht-statischen Datenelemente deklarieren, die Speicher belegen würden, der von den Real- und Imaginärteilen getrennt ist, und muss sicherstellen, dass die Klassentemplatespezialisierung keine
Padding-Bits
enthält. Die Implementierung muss auch sicherstellen, dass Optimierungen für den Array-Zugriff die Möglichkeit berücksichtigen, dass ein Zeiger auf
value_type
eine
std::complex
-Spezialisierung oder ein Array davon aliassen könnte.
Literale
|
Definiert im Inline-Namespace
std::literals::complex_literals
|
|
|
Ein
std::complex
Literal, das eine rein imaginäre Zahl repräsentiert
(Funktion) |
|
Hinweise
| Feature-Test Makro | Wert | Std | Funktion |
|---|---|---|---|
__cpp_lib_constexpr_complex
|
201711L
|
(C++20) | constexpr einfache komplexe mathematische Funktionen in <complex> |
202306L
|
(C++26) | Mehr constexpr für <complex> | |
__cpp_lib_tuple_like
|
202311L
|
(C++26) |
Füge Tupel-Protokoll zu
std::complex
hinzu
|
Beispiel
#include <cmath> #include <complex> #include <iomanip> #include <iostream> #include <ranges> int main() { using namespace std::complex_literals; std::cout << std::fixed << std::setprecision(1); std::complex<double> z1 = 1i * 1i; // imaginäre Einheit quadriert std::cout << "i * i = " << z1 << '\n'; std::complex<double> z2 = std::pow(1i, 2); // imaginäre Einheit quadriert std::cout << "pow(i, 2) = " << z2 << '\n'; const double PI = std::acos(-1); // oder std::numbers::pi in C++20 std::complex<double> z3 = std::exp(1i * PI); // Eulersche Formel std::cout << "exp(i * pi) = " << z3 << '\n'; std::complex<double> z4 = 1.0 + 2i, z5 = 1.0 - 2i; // Konjugierte std::cout << "(1 + 2i) * (1 - 2i) = " << z4 * z5 << '\n'; const auto zz = {0.0 + 1i, 2.0 + 3i, 4.0 + 5i}; #if __cpp_lib_tuple_like >= 202311L for (double re : zz | std::views::keys) std::cout << re << ' '; std::cout << '\n'; for (double im : zz | std::views::values) std::cout << im << ' '; std::cout << '\n'; #else for (double re : zz | std::views::transform([](auto z){ return z.real(); })) std::cout << re << ' '; std::cout << '\n'; for (double im : zz | std::views::transform([](auto z){ return z.imag(); })) std::cout << im << ' '; std::cout << '\n'; #endif }
Ausgabe:
i * i = (-1.0,0.0) pow(i, 2) = (-1.0,0.0) exp(i * pi) = (-1.0,0.0) (1 + 2i) * (1 - 2i) = (5.0,0.0) 0.0 2.0 4.0 1.0 3.0 5.0
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 387 | C++98 |
std::complex
war nicht garantiert kompatibel mit C
complex
|
Kompatibilität garantiert |
Siehe auch
|
C-Dokumentation
für
Komplexe Zahlenarithmetik
|