Tipos complexos estão no idioma C desde o padrão C99 ( -std=c99
opção do GCC). Alguns compiladores podem implementar tipos complexos, mesmo em modos mais antigos, mas essa é uma extensão não padrão e não portátil (por exemplo, IBM XL, GCC, pode ser intel, ...).
Você pode começar em http://en.wikipedia.org/wiki/Complex.h - fornece uma descrição das funções em complex.h
Este manual http://pubs.opengroup.org/onlinepubs/009604499/basedefs/complex.h.html também fornece algumas informações sobre macros.
Para declarar uma variável complexa, use
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
Para atribuir um valor ao complexo, use a _Complex_I
macro de complex.h
:
float _Complex d = 2.0f + 2.0f*_Complex_I;
(na verdade, pode haver alguns problemas aqui com (0,-0i)
números e NaNs na metade única do complexo)
O módulo é cabs(a)
/ cabsl(c)
/ cabsf(b)
; Parte real é creal(a)
, imaginário é cimag(a)
. carg(a)
é para argumento complexo.
Para acessar diretamente (ler / escrever) uma parte imag real, você pode usar esta extensão GCC não portável :
__real__ a = 1.4;
__imag__ a = 2.0;
float b = __real__ a;