typedef struct {
  float re;
  float im;
  } complex;
#define cmplx( real_part , imaginary_part , x)\
  x.re = (float)real_part;\
  x.im = (float)imaginary_part;
#define add( x , y , z )\
  z.re = x.re + y.re;\
  z.im = x.im + y.im;
#define subtract( x , y , z )\
  z.re = x.re - y.re;\
  z.im = x.im - y.im;
#define multiply( x , y , z )\
  z.re = x.re * y.re - x.im * y.im;\
  z.im = x.re * y.im + x.im * y.re;
#define conjugate( x , z )\
  z.re = x.re;\
  z.im = -x.im;
#define absolute( x , z )\
  multiply( x , conjugate( x , z ) );\
  z=sqrt(z.re);
#define prtcmplx(x)\
  printf("%15.8e %15.8e",x.re,x.im); 
