5.10 Komplexe Gleitpunkttypen – <complex.h>
Mit dem C99-Standard wurden auch komplexe Gleitpunkttypen eingeführt. Diese Typen sind in der Headerdatei <complex.h> definiert.
Hinweis |
C++-Entwickler sollten die Headerdatei <complex.h> nicht mit dem C++-Standard-Header <complex> gleichsetzen. |
Eine komplexe Zahl wird hierbei als Paar aus Real- und Imaginärteil dargestellt, die auch mit den Funktionen creal() und cimag() ausgegeben werden können. Beide Teile der komplexen Zahl bestehen entweder aus den Typen float, double oder long double. Daher gibt es wie auch bei den reellen Gleitpunktzahlen folgende drei komplexe Gleitpunkttypen:
float _Complex double _Complex long double _Complex
Da komplexe Zahlen einen Real- und einen Imaginärteil haben, beträgt die Größe des Datentyps in der Regel das Doppelte wie bei den grundlegenden Datentypen. Ein float _Complex benötigt somit 8 Bytes, weil ja im Grunde zwei float-Elemente benötigt werden. Folgendes Listing soll das verdeutlichen:
/* complex.c */ #include <stdio.h> #include <stdlib.h> #include <complex.h> int main(void) { float f1 = 1.0; float complex fc = 2.0 + 3.0*I; // 4 Bytes printf("sizeof(float) : %d\n", sizeof(float)); // 8 Bytes (realer und imaginärer Teil) printf("sizeof(float complex) : %d\n", sizeof(float complex)); // Ausgabe vom Real- und Imaginärteil printf("%f + %f\n", creal(fc), cimag(fc)); return EXIT_SUCCESS; }
Um nicht die umständliche Schreibweise mit dem Unterstrich _Complex verwenden zu müssen, ist in der Headerdatei <complex.h> das Makro complex definiert, womit Sie anstelle des Schlüsselworts _Complex auch complex verwenden können:
float complex // gleich wie float _Complex double complex // gleich wie double _Complex long double complex // gleich wie long double _Complex
Des Weiteren ist in der Headerdatei das Makro I definiert, das die imaginäre Einheit mit dem Typ const float complex darstellt.
Vielleicht hierzu eine kurze Hintergrundinformation zu komplexen Gleitpunktzahlen. Eine komplexe Zahl zVal wird beispielsweise folgendermaßen in einem kartesischen Koordinatensystem dargestellt:
zVal = xVal + yVal * I
xVal und yVal sind hierbei reelle Zahlen, und I ist der imaginäre Teil. Die Zahl xVal wird hierbei als realer Teil betrachtet, und yVal ist der imaginäre Teil von zVal.
Kartesisches Koordinatensystem |
Das kartesische Koordinatensystem ist ein häufig verwendetes Koordinatensystem im zwei- und dreidimensionalen Raum, mit dem sich viele geometrische Sachverhalte einfacher beschreiben lassen. |
Noch mehr zu den komplexen Gleitpunkttypen und deren mathematischen Funktionen erfahren Sie ab Abschnitt 20.3, »Mathematische Funktionen«.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.