1 /*  cmmult.c    CCMATH mathematics library source code.
2  *
3  *  Copyright (C)  2000   Daniel A. Atkinson    All rights reserved.
4  *  This code may be redistributed under the terms of the GNU library
5  *  public license (LGPL). ( See the lgpl.license file for details.)
6  * ------------------------------------------------------------------------
7  */
8 #include <stdlib.h>
9 #include "complex.h"
cmmult(Cpx * cm,Cpx * a,Cpx * b,int n,int m,int l)10 void cmmult(Cpx *cm,Cpx *a,Cpx *b,int n,int m,int l)
11 { Cpx z,*q0,*p,*q; int i,j,k;
12   q0=(Cpx *)calloc(m,sizeof(Cpx));
13   for(i=0; i<l ;++i,++cm){
14     for(k=0,p=b+i; k<m ;p+=l) q0[k++]= *p;
15     for(j=0,p=a,q=cm; j<n ;++j,q+=l){
16       for(k=0,z.re=z.im=0.; k<m ;++k,++p){
17 	z.re+=p->re*q0[k].re-p->im*q0[k].im;
18 	z.im+=p->im*q0[k].re+p->re*q0[k].im;
19        }
20       *q=z;
21      }
22    }
23   free(q0);
24 }
25