#include typedef struct { double re, im; } COMPLEX; static inline void COMPLEX_zero(COMPLEX *r) { r->re = r->im = 0.0; } static inline void COMPLEX_add(COMPLEX *r, const COMPLEX *x, const COMPLEX *y) { double re = x->re + y->re; double im = x->im + y->im; r->re = re; r->im = im; } static inline void COMPLEX_mul(COMPLEX *r, const COMPLEX *x, const COMPLEX *y) { double re = x->re * y->re - x->im * y->im; double im = x->im * y->re + x->re * y->im; r->re = re; r->im = im; } static inline void COMPLEX_mul_add(COMPLEX *r, const COMPLEX *x, const COMPLEX *y) { double re = r->re + x->re * y->re - x->im * y->im; double im = r->im + x->im * y->re + x->re * y->im; r->re = re; r->im = im; } void COMPLEX_mat_mul1(unsigned m, unsigned n, unsigned p, COMPLEX * restrict c, unsigned stride_c, const COMPLEX *a, unsigned stride_a, const COMPLEX *b, unsigned stride_b) { for(unsigned i=0; i