I tipi complessi sono in linguaggio C dallo standard C99 ( -std=c99opzione di GCC). Alcuni compilatori possono implementare tipi complessi anche in modalità più precedenti, ma questa è un'estensione non standard e non portabile (ad esempio IBM XL, GCC, potrebbe essere Intel, ...).
Puoi iniziare da http://en.wikipedia.org/wiki/Complex.h - fornisce una descrizione delle funzioni da complex.h
Questo manuale http://pubs.opengroup.org/onlinepubs/009604499/basedefs/complex.h.html fornisce anche alcune informazioni sulle macro.
Per dichiarare una variabile complessa, utilizzare
double _Complex a; // use c* functions without suffix
o
float _Complex b; // use c*f functions - with f suffix
long double _Complex c; // use c*l functions - with l suffix
Per dare un valore a complesso, usa la _Complex_Imacro da complex.h:
float _Complex d = 2.0f + 2.0f*_Complex_I;
(in realtà qui possono esserci dei problemi con (0,-0i)numeri e NaN nella singola metà del complesso)
Il modulo è cabs(a)/ cabsl(c)/ cabsf(b); La parte reale è creal(a), l'immaginario è cimag(a). carg(a)è per argomenti complessi.
Per accedere direttamente (lettura / scrittura) alla parte reale e dell'immagine puoi utilizzare questa estensione GCC non portatile :
__real__ a = 1.4;
__imag__ a = 2.0;
float b = __real__ a;