deltaluca

Untitled

Apr 24th, 2013
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.11 KB | None | 0 0
  1. void FastDFS(double *x, double *y, double *w, double *Wp, int N, int skip) {
  2.     int i, Nskip;
  3.     double *xe, *ye, *yn, *We, *Wn, re, im;
  4.     if (N == 1) {
  5.         for (xe = x + N*2; x < xe; x += 2, y += skip) {
  6.             x[0] = y[0];
  7.             x[1] = y[1];
  8.         }
  9.         return;
  10.     }
  11.  
  12.     if ((N%2) != 0) {
  13.         Nskip = N*skip;
  14.         ye = y + Nskip, We = Wp + Nskip;
  15.         for (Wn = Wp, i = 0; i < Nskip; i += skip, x += 2, Wn = Wp) {
  16.             x[0] = x[1] = 0;
  17.             for (yn = y; yn < ye; yn += skip) {
  18.                 x[0] += Wn[0]*yn[0] - Wn[1]*yn[1];
  19.                 x[1] += Wn[0]*yn[1] + Wn[1]*yn[0];
  20.                 Wn += i;
  21.                 if (Wn > We) Wn -= Nskip;
  22.             }
  23.         }
  24.         return;
  25.     }
  26.  
  27.     FastDFS(w,   y,      x,   Wp, N/2, skip*2);
  28.     FastDFS(w+N, y+skip, x+N, Wp, N/2, skip*2);
  29.     for (xe = x + N; x < xe; x += 2, w += 2, Wp += skip) {
  30.         re = Wp[0]*w[N] - Wp[1]*w[N+1];
  31.         im = Wp[0]*w[N+1] + Wp[1]*w[N];
  32.         x[0]   = w[0] + re;
  33.         x[1]   = w[1] + im;
  34.         x[N]   = w[0] - re;
  35.         x[N+1] = w[1] - im;
  36.     }
  37. }
Advertisement
Add Comment
Please, Sign In to add comment