Zfour1.cin

From Citizendium
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
This article is developing and not approved.
Main Article
Discussion
Related Articles  [?]
Bibliography  [?]
External Links  [?]
Citable Version  [?]
 
This editable Main Article is under development and subject to a disclaimer.

// zfour.cin is C++ implermentation of the routine required for compilation of examples with DCT .

#define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr
void zfour1(z_type data[], unsigned long nn, int isign)
{
unsigned long n,mmax,m,j,istep,i;
double wtemp,wr,wpr,wpi,wi,theta;
z_type tempr,tempi;
n=nn << 1;
j=1;
for(i=1;i<n;i+=2){
                       if(j>i){SWAP(data[j],data[i]);
                               SWAP(data[j+1],data[i+1]); }
                       m=n >> 1;
                       while (m >= 2 && j > m) { j -= m; m >>= 1; }
                       j += m;
                }
mmax=2;
while(n>mmax)
{ istep=mmax << 1;
  theta=isign*(6.28318530717959/mmax);
  wtemp=sin(0.5*theta);
  wpr = -2.0*wtemp*wtemp;
  wpi=sin(theta);
  wr=1.0;
  wi=0.0;
  for(m=1;m<mmax;m+=2)
       {for (i=m;i<=n;i+=istep)
          {j=i+mmax;
           tempr=wr*data[j]-wi*data[j+1];
           tempi=wr*data[j+1]+wi*data[j];
           data[j]=data[i]-tempr;
           data[j+1]=data[i+1]-tempi;
           data[i] += tempr;
           data[i+1] += tempi;
          }
        wr=(wtemp=wr)*wpr-wi*wpi+wr;
        wi=wi*wpr+wtemp*wpi+wi;
       }
  mmax=istep;
}
}
#undef SWAP

References

http://tori.ils.uec.ac.jp/TORI/index.php/Zfour1.cin