int main() {
array double x[3][3]={1,2,3,
3,4,5,
6,7,8};
array double complex zx[3][3]={complex(1,1),complex(2,2),0,
3,complex(4,1),complex(2,5),
0,0,0};
array double complex zy[3][3];
array double complex y[3][3];
expm(y,x);
printf("x = \n%f",x);
printf("y = \n%5.3f",y);
logm(x,y);
printf("x = \n%f",x);
printf("\n");
expm(zy,zx);
printf("zx = \n%5.3f",zx);
printf("zy = \n%5.3f",zy);
logm(zx,zy);
printf("zx = \n%5.3f",zx);
}

x =
1.000000 2.000000 3.000000
3.000000 4.000000 5.000000
6.000000 7.000000 8.000000
y =
complex(157372.953,0.000) complex(200034.605,0.000) complex(242697.257,0.000)
complex(290995.910,0.000) complex(369883.552,0.000) complex(448769.194,0.000)
complex(491431.846,0.000) complex(624654.473,0.000) complex(757878.099,0.000)
x =
1.000000 2.000000 3.000000
3.000000 4.000000 5.000000
6.000000 7.000000 8.000000
zx =
complex(1.000,1.000) complex(2.000,2.000) complex(0.000,0.000)
complex(3.000,0.000) complex(4.000,1.000) complex(2.000,5.000)
complex(0.000,0.000) complex(0.000,0.000) complex(0.000,0.000)
zy =
complex(-44.901,56.755) complex(-87.478,70.853) complex(-101.511,-18.910)
complex(-12.469,118.748) complex(-57.370,175.502) complex(-155.470,67.839)
complex(0.000,0.000) complex(0.000,0.000) complex(1.000,0.000)
zx =
complex(1.000,1.000) complex(2.000,2.000) complex(0.000,0.000)
complex(3.000,0.000) complex(4.000,1.000) complex(2.000,5.000)
complex(0.000,0.000) complex(0.000,0.000) complex(0.000,0.000)