Los tipos complejos están en lenguaje C desde el estándar C99 ( -std=c99
opción de GCC). Algunos compiladores pueden implementar tipos complejos incluso en modos más anteriores, pero esta es una extensión no estándar y no portátil (por ejemplo, IBM XL, GCC, puede ser Intel, ...).
Puede comenzar desde http://en.wikipedia.org/wiki/Complex.h : proporciona una descripción de las funciones de complex.h
Este manual http://pubs.opengroup.org/onlinepubs/009604499/basedefs/complex.h.html también brinda información sobre macros.
Para declarar una variable compleja, use
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
Para dar un valor en complejo, use _Complex_I
macro de complex.h
:
float _Complex d = 2.0f + 2.0f*_Complex_I;
(en realidad puede haber algunos problemas aquí con (0,-0i)
números y NaN en la mitad del complejo)
Módulo es cabs(a)
/ cabsl(c)
/ cabsf(b)
; La parte real es creal(a)
, Imaginary is cimag(a)
. carg(a)
es para argumentos complejos.
Para acceder directamente (leer / escribir) una parte real e imag puede usar esta extensión GCC no portable :
__real__ a = 1.4;
__imag__ a = 2.0;
float b = __real__ a;