void mat_mul(complex a[][2], complex b[][2], complex c[][2])
{
int i, j, k;
complex s, t;

for (i = 0; i < 2; i++)
for (j = 0; j < 2; j++) {
s.re = s.im = 0.0;
for (k = 0; k < 2; k++) {
t = mul(a[i][k], b[k][j]);
s = add(s, t);
}
c[i][j] = s;
}
}

void print_mat(complex a[][2], char *str)
{
int i, j;

printf("%s = \n", str);
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++)
printf("%+f + %+fi ", a[i][j].re, a[i][j].im);
printf("\n");
}
}

complex add(complex alpha, complex beta)
{
complex gamma;

gamma.re = alpha.re + beta.re;
gamma.im = alpha.im + beta.im;

return gamma;
}