/* Define complex multiplication and conjugate for declared struct complex */ #define rmul(x,y) (x.re * y.re - x.im * y.im) #define imul(x,y) (x.im * y.re + x.re * y.im) #define rcmul(x,y) (x.re * y.re + x.im * y.im) #define icmul(x,y) (x.im * y.re - x.re * y.im) /* Define complex division -- x/y for declared struct complex */ #define rdiv(x,y) ((x.re * y.re + x.im * y.im)/(y.re * y.re + y.im * y.im)) #define idiv(x,y) ((x.im * y.re - x.re * y.im)/(y.re * y.re + y.im * y.im)) /* Define complex multiplication and conjugate for struct complex pointers */ #define rmulp(x,y) (x->re * y->re - x->im * y->im) #define imulp(x,y) (x->im * y->re + x->re * y->im) #define rcmulp(x,y) (x->re * y->re + x->im * y->im) #define icmulp(x,y) (x->im * y->re - x->re * y->im) /* Define complex division -- x/y for struct complex pointers */ #define rdivp(x,y) ((x->re * y->re + x->im * y->im)/(y->re * y->re + y->im * y->im)) #define idivp(x,y) ((x->im * y->re - x->re * y->im)/(y->re * y->re + y->im * y->im)) /* Declare the structure to hold complex numbers */ struct complex { float re; float im; };