Les types complexes sont en langage C depuis le standard C99 ( -std=c99
option de GCC). Certains compilateurs peuvent implémenter des types complexes même dans des modes plus anciens, mais il s'agit d'une extension non standard et non portable (par exemple IBM XL, GCC, peut être Intel, ...).
Vous pouvez commencer à partir de http://en.wikipedia.org/wiki/Complex.h - il donne une description des fonctions de complex.h
Ce manuel http://pubs.opengroup.org/onlinepubs/009604499/basedefs/complex.h.html donne également des informations sur les macros.
Pour déclarer une variable complexe, utilisez
double _Complex a; // use c* functions without suffix
ou
float _Complex b; // use c*f functions - with f suffix
long double _Complex c; // use c*l functions - with l suffix
Pour donner une valeur en complexe, utilisez la _Complex_I
macro de complex.h
:
float _Complex d = 2.0f + 2.0f*_Complex_I;
(en fait, il peut y avoir des problèmes ici avec les (0,-0i)
nombres et les NaN dans une seule moitié du complexe)
Le module est cabs(a)
/ cabsl(c)
/ cabsf(b)
; La vraie partie est creal(a)
, imaginaire est cimag(a)
. carg(a)
est pour un argument complexe.
Pour accéder directement (lecture / écriture) à une partie imag réelle, vous pouvez utiliser cette extension GCC non portable :
__real__ a = 1.4;
__imag__ a = 2.0;
float b = __real__ a;