Namensräume
Varianten
Aktionen

Arithmetik mit komplexen Zahlen

Von cppreference.com
< c‎ | numerisch

Wenn das Makro __STDC_NO_COMPLEX__ von der Implementierung definiert wird, werden die komplexen Typen, der Header <complex.h> und alle hier aufgeführten Namen nicht bereitgestellt.

(seit C11)

Die C-Programmiersprache unterstützt ab C99 komplexe Zahlenarithmetik mit den drei eingebauten Typen double _Complex, float _Complex und long double _Complex (siehe _Complex). Wenn der Header <complex.h> eingebunden ist, 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 ist, sind die drei imaginären Typen auch als double imaginary, float imaginary und long double imaginary zugänglich.

Standard-Arithmetikoperatoren +, -, *, / können mit reellen, komplexen und imaginären Typen in jeder Kombination verwendet werden.

Ein Compiler, der __STDC_IEC_559_COMPLEX__ definiert, wird für die Unterstützung imaginärer Zahlen empfohlen, ist aber nicht dazu verpflichtet. POSIX empfiehlt die Überprüfung, ob das Makro _Imaginary_I definiert ist, um die Unterstützung für imaginäre 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>

Inhalt

Typen
Makro für imaginären Typ
(Keyword-Makro) [bearbeiten]
Makro für komplexen Typ
(Keyword-Makro) [bearbeiten]
Die imaginäre Konstante
die imaginäre Einheit konstante i
(Makro-Konstante) [bearbeiten]
die komplexe Einheit konstante i
(Makro-Konstante) [bearbeiten]
(C99)
die komplexe oder imaginäre Einheit konstante i
(Makro-Konstante) [bearbeiten]
Manipulation
(C11)(C11)(C11)
erzeugt eine komplexe Zahl aus Real- und Imaginärteil
(Funktionsmakro) [bearbeiten]
(C99)(C99)(C99)
berechnet den Realteil einer komplexen Zahl
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet den Imaginärteil einer komplexen Zahl
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet den Betrag einer komplexen Zahl
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet den Phasenwinkel einer komplexen Zahl
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet die komplexe Konjugation
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet die Projektion auf die Riemann-Sphäre
(Funktion) [bearbeiten]
Exponentialfunktionen
(C99)(C99)(C99)
berechnet die komplexe Eulersche Exponentialfunktion
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet den komplexen natürlichen Logarithmus
(Funktion) [bearbeiten]
Potenzfunktionen
(C99)(C99)(C99)
berechnet die komplexe Potenzfunktion
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet die komplexe Quadratwurzel
(Funktion) [bearbeiten]
Trigonometrische Funktionen
(C99)(C99)(C99)
berechnet den komplexen Sinus
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet den komplexen Kosinus
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet den komplexen Tangens
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet den komplexen Arkussinus
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet den komplexen Arkuskosinus
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet den komplexen Arkustangens
(Funktion) [bearbeiten]
Hyperbolische Funktionen
(C99)(C99)(C99)
berechnet den komplexen hyperbolischen Sinus
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet den komplexen hyperbolischen Kosinus
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet den komplexen hyperbolischen Tangens
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet den komplexen inversen hyperbolischen Sinus
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet den komplexen inversen hyperbolischen Kosinus
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet den komplexen inversen hyperbolischen Tangens
(Funktion) [bearbeiten]

[bearbeiten] Anmerkungen

Die folgenden Funktionsnamen sind potenziell(seit C23) für die zukünftige Ergänzung zu <complex.h> reserviert und stehen in Programmen, die diesen Header einbinden, nicht zur Verfügung: 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 Varianten mit den Suffixen -f und -l.

Obwohl der C-Standard die inversen hyperbolischen Funktionen als "komplexe Arkus-hyperbolische Sinusfunktionen" usw. bezeichnet, sind die inversen Funktionen der hyperbolischen Funktionen die Flächenfunktionen. Ihr Argument ist die Fläche eines hyperbolischen Sektors, nicht eines Bogens. Die korrekten Bezeichnungen sind "komplexe inverse hyperbolische Sinusfunktionen" usw. Einige Autoren verwenden "komplexe Flächen-hyperbolische Sinusfunktionen" usw.

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

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

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

Obwohl MSVC einen <complex.h>-Header bereitstellt, implementiert er komplexe Zahlen nicht als native Typen, sondern als structs, die mit den standardmäßigen C-komplexen Typen inkompatibel sind und die Operatoren +, -, *, / nicht unterstützen.

[bearbeiten] Beispiel

#include <complex.h>
#include <stdio.h>
#include <tgmath.h>
 
int main(void)
{
    double complex z1 = I * I;     // imaginary unit squared
    printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1));
 
    double complex z2 = pow(I, 2); // imaginary unit squared
    printf("pow(I, 2) = %.1f%+.1fi\n", creal(z2), cimag(z2));
 
    double PI = acos(-1);
    double complex z3 = exp(I * PI); // Euler's formula
    printf("exp(I*PI) = %.1f%+.1fi\n", creal(z3), cimag(z3));
 
    double complex z4 = 1 + 2 * I, z5 = 1 - 2 * I; // conjugates
    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

[bearbeiten] 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 Typ-generische 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 Typ-generische 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 Typ-generische 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 Typ-generische 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)

[bearbeiten] Siehe auch

C++ Dokumentation für Komplexe Zahlenarithmetik