public void ComputeTable(int size)
{
forwardCos = new double[size];
forwardSin = new double[size];
// forward pass
int i = 0;
int n = size;
int mmax = 1;
while (n > mmax)
{
int istep = 2 * mmax;
double theta = Math.PI / mmax;
double wr = 1, wi = 0;
double wpr = Math.Cos(theta);
double wpi = Math.Sin(theta);
for (int m = 0; m < istep; m += 2)
{
forwardCos[i] = wr;
forwardSin[i] = wi;
i++;
double t = wr;
wr = wr * wpr - wi * wpi;
wi = wi * wpr + t * wpi;
}
mmax = istep;
}
}