Namespaces
Variants

std:: complex

From cppreference.net
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)
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)
berechnet den Arkussinus einer komplexen Zahl ( arcsin(z) )
(Funktionsschablone)
berechnet den Arkuskosinus einer komplexen Zahl ( arccos(z) )
(Funktionsschablone)
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)
berechnet den Flächenhyperbelsinus einer komplexen Zahl ( arsinh(z) )
(Funktionsschablone)
berechnet den Flächenhyperbelkosinus einer komplexen Zahl ( arcosh(z) )
(Funktionsschablone)
berechnet den Flächenhyperbeltangens einer komplexen Zahl ( artanh(z) )
(Funktionsschablone)

Hilfstypen

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