Arithmetik mit komplexen Zahlen
|
Wenn das Makro |
(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 |
(seit C99) (bis C11) |
|
Imaginäre Zahlen werden unterstützt, wenn |
(seit C11) |
| Definiert im Header
<complex.h> | ||
Typen | ||
| (C99) |
Makro für imaginären Typ (Keyword-Makro) | |
| (C99) |
Makro für komplexen Typ (Keyword-Makro) | |
Die imaginäre Konstante | ||
| (C99) |
die imaginäre Einheit konstante i (Makro-Konstante) | |
| (C99) |
die komplexe Einheit konstante i (Makro-Konstante) | |
| (C99) |
die komplexe oder imaginäre Einheit konstante i (Makro-Konstante) | |
Manipulation | ||
| (C11)(C11)(C11) |
erzeugt 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 komplexe Konjugation (Funktion) | |
| (C99)(C99)(C99) |
berechnet die Projektion auf die Riemann-Sphäre (Funktion) | |
Exponentialfunktionen | ||
| (C99)(C99)(C99) |
berechnet die komplexe Eulersche 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 Arkustangens (Funktion) | |
Hyperbolische Funktionen | ||
| (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 inversen hyperbolischen Sinus (Funktion) | |
| (C99)(C99)(C99) |
berechnet den komplexen inversen hyperbolischen Kosinus (Funktion) | |
| (C99)(C99)(C99) |
berechnet den komplexen inversen hyperbolischen Tangens (Funktion) | |
[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 |
|---|
|
[bearbeiten] Siehe auch
| C++ Dokumentation für Komplexe Zahlenarithmetik
|