私はこの問題で2日間立ち往生しています。誰かがロジックを手伝ってくれますか?
優れたアルゴリズムの C++ プログラムに取り組んでいます。私は現在、シーケンスの FFT を計算するための Danielson-Lanczos アルゴリズムに取り組んでいます。
見つめている
mmax=2;
while (n>mmax) {
istep = mmax<<1;
theta = -(2*M_PI/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-1] - wi*data[j];
tempi = wr * data[j] + wi*data[j-1];
data[j-1] = data[i-1] - tempr;
data[j] = data[i] - tempi;
data[i-1] += tempr;
data[i] += tempi;
}
wtemp=wr;
wr += wr*wpr - wi*wpi;
wi += wi*wpr + wtemp*wpi;
}
mmax=istep;
}
for-loop
部分全体がわずか 4 行のコード (またはそれ以上) に削減されるようにコードを論理的に記述する方法はありますか?