Simplified exp_spreading by unifying both directions. Have to admit I don't
fully understand why that works!
This commit is contained in:
parent
5215623dcd
commit
06c67dbce2
1 changed files with 14 additions and 37 deletions
|
@ -43,47 +43,24 @@ static void exp_rotation(float *X, int len, float theta, int dir, int stride, in
|
||||||
int i, k;
|
int i, k;
|
||||||
float c, s;
|
float c, s;
|
||||||
c = cos(theta);
|
c = cos(theta);
|
||||||
s = sin(theta);
|
s = dir*sin(theta);
|
||||||
if (dir > 0)
|
for (k=0;k<iter;k++)
|
||||||
{
|
{
|
||||||
for (k=0;k<iter;k++)
|
for (i=0;i<len-stride;i++)
|
||||||
{
|
{
|
||||||
for (i=0;i<len-stride;i++)
|
float x1, x2;
|
||||||
{
|
x1 = X[i];
|
||||||
float x1, x2;
|
x2 = X[i+stride];
|
||||||
x1 = X[i];
|
X[i] = c*x1 - s*x2;
|
||||||
x2 = X[i+stride];
|
X[i+stride] = c*x2 + s*x1;
|
||||||
X[i] = c*x1 - s*x2;
|
|
||||||
X[i+stride] = c*x2 + s*x1;
|
|
||||||
}
|
|
||||||
for (i=len-2*stride-1;i>=0;i--)
|
|
||||||
{
|
|
||||||
float x1, x2;
|
|
||||||
x1 = X[i];
|
|
||||||
x2 = X[i+stride];
|
|
||||||
X[i] = c*x1 - s*x2;
|
|
||||||
X[i+stride] = c*x2 + s*x1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
for (i=len-2*stride-1;i>=0;i--)
|
||||||
for (k=0;k<iter;k++)
|
|
||||||
{
|
{
|
||||||
for (i=0;i<len-2*stride;i++)
|
float x1, x2;
|
||||||
{
|
x1 = X[i];
|
||||||
float x1, x2;
|
x2 = X[i+stride];
|
||||||
x1 = X[i];
|
X[i] = c*x1 - s*x2;
|
||||||
x2 = X[i+stride];
|
X[i+stride] = c*x2 + s*x1;
|
||||||
X[i] = c*x1 + s*x2;
|
|
||||||
X[i+stride] = c*x2 - s*x1;
|
|
||||||
}
|
|
||||||
for (i=len-stride-1;i>=0;i--)
|
|
||||||
{
|
|
||||||
float x1, x2;
|
|
||||||
x1 = X[i];
|
|
||||||
x2 = X[i+stride];
|
|
||||||
X[i] = c*x1 + s*x2;
|
|
||||||
X[i+stride] = c*x2 - s*x1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue