Namespaces
Variants

Complex number arithmetic

From cppreference.net

Falls die Makrokonstante __STDC_NO_COMPLEX__ durch die Implementierung definiert ist, werden die komplexen Typen, der Header <complex.h> und alle hier aufgeführten Namen nicht bereitgestellt.

(seit C11)

Die Programmiersprache C unterstützt ab C99 die Mathematik mit komplexen Zahlen durch die drei eingebauten Typen double _Complex , float _Complex und long double _Complex (siehe _Complex ). Wenn der Header <complex.h> eingebunden wird, sind die drei komplexen Zahlentypen auch als double complex , float complex und long double complex zugänglich.

Zusätzlich zu den komplexen Typen können die drei imaginären Typen unterstützt werden: double _Imaginary , float _Imaginary und long double _Imaginary (siehe _Imaginary ). Wenn der Header <complex.h> eingebunden wird, sind die drei imaginären Typen auch zugänglich als double imaginary , float imaginary und long double imaginary .

Standarde arithmetische Operatoren + , - , * , / können mit reellen, komplexen und imaginären Typen in beliebiger Kombination verwendet werden.

Ein Compiler, der __STDC_IEC_559_COMPLEX__ definiert, wird empfohlen, ist jedoch nicht verpflichtet, imaginäre Zahlen zu unterstützen. POSIX empfiehlt zu prüfen, ob das Makro _Imaginary_I definiert ist, um die Unterstützung imaginärer Zahlen zu identifizieren.

(seit C99)
(bis C11)

Imaginäre Zahlen werden unterstützt, wenn __STDC_IEC_559_COMPLEX__ oder __STDC_IEC_60559_COMPLEX__ (seit C23) definiert ist.

(seit C11)
Definiert im Header <complex.h>

Inhaltsverzeichnis

Typen
Imaginärer Typ-Makro
(Schlüsselwort-Makro)
(C99)
Komplexer Typ-Makro
(Schlüsselwort-Makro)
Die imaginäre Konstante
die imaginäre Einheitskonstante i
(Makrokonstante)
die komplexe Einheitskonstante i
(Makrokonstante)
(C99)
die komplexe oder imaginäre Einheitskonstante i
(Makrokonstante)
Manipulation
(C11) (C11) (C11)
konstruiert eine komplexe Zahl aus Real- und Imaginärteil
(Funktionsmakro)
(C99) (C99) (C99)
berechnet den Realteil einer komplexen Zahl
(Funktion)
(C99) (C99) (C99)
berechnet den Imaginärteil einer komplexen Zahl
(Funktion)
(C99) (C99) (C99)
berechnet den Betrag einer komplexen Zahl
(Funktion)
(C99) (C99) (C99)
berechnet den Phasenwinkel einer komplexen Zahl
(Funktion)
(C99) (C99) (C99)
berechnet die komplex Konjugierte
(Funktion)
(C99) (C99) (C99)
berechnet die Projektion auf die Riemannsche Zahlenkugel
(Funktion)
Exponentialfunktionen
(C99) (C99) (C99)
berechnet die komplexe Basis-e-Exponentialfunktion
(Funktion)
(C99) (C99) (C99)
berechnet den komplexen natürlichen Logarithmus
(Funktion)
Potenzfunktionen
(C99) (C99) (C99)
berechnet die komplexe Potenzfunktion
(Funktion)
(C99) (C99) (C99)
berechnet die komplexe Quadratwurzel
(Funktion)
Trigonometrische Funktionen
(C99) (C99) (C99)
berechnet den komplexen Sinus
(Funktion)
(C99) (C99) (C99)
berechnet den komplexen Kosinus
(Funktion)
(C99) (C99) (C99)
berechnet den komplexen Tangens
(Funktion)
(C99) (C99) (C99)
berechnet den komplexen Arkussinus
(Funktion)
(C99) (C99) (C99)
berechnet den komplexen Arkuskosinus
(Funktion)
(C99) (C99) (C99)
berechnet den komplexen Arcustangens
(Funktion)
Hyperbelfunktionen
(C99) (C99) (C99)
berechnet den komplexen hyperbolischen Sinus
(Funktion)
(C99) (C99) (C99)
berechnet den komplexen hyperbolischen Kosinus
(Funktion)
(C99) (C99) (C99)
berechnet den komplexen hyperbolischen Tangens
(Funktion)
(C99) (C99) (C99)
berechnet den komplexen Areasinus Hyperbolicus
(Funktion)
(C99) (C99) (C99)
berechnet den komplexen Areakosinus Hyperbolicus
(Funktion)
(C99) (C99) (C99)
berechnet den komplexen Areakosinus Hyperbolicus
(Funktion)

Hinweise

Die folgenden Funktionsnamen sind potenziell (seit C23) für zukünftige Ergänzungen zu <complex.h> reserviert und stehen nicht zur Verwendung in Programmen zur Verfügung, die diesen Header einbinden: cerf , cerfc , cexp2 , cexpm1 , clog10 , clog1p , clog2 , clgamma , ctgamma , csinpi , ccospi , ctanpi , casinpi , cacospi , catanpi , ccompoundn , cpown , cpowr , crootn , crsqrt , cexp10m1 , cexp10 , cexp2m1 , clog10p1 , clog2p1 , clogp1 (seit C23) , zusammen mit ihren - f - und - l -suffigierten Varianten.

Obwohl der C-Standard die inversen hyperbolischen Funktionen als "komplexer Areahyperbelsinus" etc. bezeichnet, sind die Umkehrfunktionen der hyperbolischen Funktionen die Areafunktionen. Ihr Argument ist die Fläche eines hyperbolischen Sektors, nicht ein Bogen. Die korrekten Bezeichnungen sind "komplexer inverser Hyperbelsinus" etc. Einige Autoren verwenden "komplexer Areahyperbelsinus" etc.

Eine komplexe oder imaginäre Zahl ist unendlich, wenn einer ihrer Teile unendlich ist, selbst wenn der andere Teil NaN ist.

Eine komplexe oder imaginäre Zahl ist endlich, wenn beide Teile weder Unendlichkeiten noch NaNs sind.

Eine komplexe oder imaginäre Zahl ist null, wenn beide Teile positive oder negative Nullen sind.

Während MSVC zwar einen <complex.h> Header bereitstellt, implementiert es komplexe Zahlen nicht als native Typen, sondern als struct s, die inkompatibel mit standardmäßigen C-Komplexzahltypen sind und die + -, - -, * - und / -Operatoren nicht unterstützen.

Beispiel

#include <complex.h>
#include <stdio.h>
#include <tgmath.h>
int main(void)
{
    double complex z1 = I * I;     // imaginäre Einheit quadriert
    printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1));
    double complex z2 = pow(I, 2); // imaginäre Einheit quadriert
    printf("pow(I, 2) = %.1f%+.1fi\n", creal(z2), cimag(z2));
    double PI = acos(-1);
    double complex z3 = exp(I * PI); // Eulersche Formel
    printf("exp(I*PI) = %.1f%+.1fi\n", creal(z3), cimag(z3));
    double complex z4 = 1 + 2 * I, z5 = 1 - 2 * I; // Konjugierte
    printf("(1+2i)*(1-2i) = %.1f%+.1fi\n", creal(z4 * z5), cimag(z4 * z5));
}

Ausgabe:

I * I = -1.0+0.0i
pow(I, 2) = -1.0+0.0i
exp(I*PI) = -1.0+0.0i
(1+2i)*(1-2i) = 5.0+0.0i

Referenzen

Erweiterter Inhalt
  • C23-Standard (ISO/IEC 9899:2024):
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (S.: TBD)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (S.: TBD)
  • 7.3 Komplexe Arithmetik <complex.h> (S.: TBD)
  • 7.25 Typgenerische Mathematik <tgmath.h> (S.: TBD)
  • 7.31.1 Komplexe Arithmetik <complex.h> (S.: TBD)
  • Anhang G (normativ) IEC 60559-kompatible komplexe Arithmetik (S.: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (S.: 128)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (S.: 128)
  • 7.3 Komplexe Arithmetik <complex.h> (S.: 136-144)
  • 7.25 Typgenerische Mathematik <tgmath.h> (S.: 272-273)
  • 7.31.1 Komplexe Arithmetik <complex.h> (S.: 391)
  • Anhang G (normativ) IEC 60559-kompatible komplexe Arithmetik (S.: 469-479)
  • C11-Standard (ISO/IEC 9899:2011):
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (S.: 177)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (S.: 177)
  • 7.3 Komplexe Arithmetik <complex.h> (S.: 188-199)
  • 7.25 Typgenerische Mathematik <tgmath.h> (S.: 373-375)
  • 7.31.1 Komplexe Arithmetik <complex.h> (S.: 455)
  • Anhang G (normativ) IEC 60559-kompatible komplexe Arithmetik (S.: 532-545)
  • C99-Standard (ISO/IEC 9899:1999):
  • 6.10.8/2 __STDC_IEC_559_COMPLEX__ (S.: 161)
  • 7.3 Komplexe Arithmetik <complex.h> (S.: 170-180)
  • 7.22 Typgenerische Mathematik <tgmath.h> (S.: 335-337)
  • 7.26.1 Komplexe Arithmetik <complex.h> (S.: 401)
  • Anhang G (informativ) IEC 60559-kompatible komplexe Arithmetik (S.: 467-480)

Siehe auch

C++ Dokumentation für Complex number arithmetic