typedef struct cx_struct {
double real;
double imag;
} CX;
#define cx_add(z,x,y) \
do { \
(z).real = (x).real + (y).real; \
(z).imag = (x).imag + (y).imag; \
} while(0)
#define cx_sub(z,x,y) \
do { \
(z).real = (x).real - (y).real; \
(z).imag = (x).imag - (y).imag; \
} while(0)
#define cx_mul(z,x,y) \
do { \
(z).real = (x).real * (y).real - (x).imag * (y).imag; \
(z).imag = (x).imag * (y).real + (x).real * (y).imag; \
} while(0)
#define cx_div(z,x,y) \
do { \
(z).real = 1.0 / ((y).real * (y).real + (y).imag * (y).imag); \
(z).imag = (z).real; \
(z).real *= (x).real * (y).real + (x).imag * (y).imag; \
(z).imag *= (x).imag * (y).real - (x).real * (y).imag; \
} while(0)
#define cx_conj_mul(z,x,y) \
do { \
(z).real = (x).real * (y).real + (x).imag * (y).imag; \
(z).imag = (x).imag * (y).real - (x).real * (y).imag; \
} while(0)
#define cx_abs(x) \
(sqrt((x).real*(x).real+(x).imag*(x).imag))
#define cx_scalar_mult(z, alpha, x) \
do { \
(z).real = alpha*(x).real; \
(z).imag = alpha*(x).imag; \
} while(0)
static CX CXZERO = { 0, 0 };
static CX CXONE = { 1, 0 };
static CX CXMONE = { -1, 0 };
syntax highlighted by Code2HTML, v. 0.9.1