I tipi complessi sono in linguaggio C dallo standard C99 ( -std=c99
opzione 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_I
macro 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;