#include typedef struct _mycomplex { float re; float im; } Complex; inline Complex complex_new(float re, float im) __attribute__ ((always_inline)); inline Complex complex_add(Complex c1, Complex c2) __attribute__ ((always_inline)); inline Complex complex_mult(Complex c1, Complex c2) __attribute__ ((always_inline)); inline double complex_abs(Complex c) __attribute__ ((always_inline)); inline Complex complex_new(float re, float im) { Complex c; c.re = re; c.im = im; return c; } inline Complex complex_mult(Complex c1, Complex c2) { Complex ret; ret.re = c1.re * c2.re - c1.im * c2.im; ret.im = c1.re * c2.im + c1.im * c2.re; return ret; } inline Complex complex_add(Complex c1, Complex c2) { c1.re += c2.re; c1.im += c2.im; return c1; } inline Complex complex_conj(Complex c) { c.im = -c.im; return c; } inline double complex_abs(Complex c) { double re, im; re = c.re; im = c.im; return sqrt(re * re + im * im); } inline void complex_print(Complex c) { printf("%.3f + i%.3f", c.re, c.im); }