我被這個問題困住了2天。有人能幫我理解邏輯嗎?有人可以用更好的邏輯寫這段代碼嗎?
我正在研究C++程序以獲得更好的算法。我現在正在研究Danielson-Lanczos算法來計算序列的FFT。
看着
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行代碼(或更好)?
只是刪除在循環體;-) – thkala
*新行*爲什麼你想減少*行數*?在任何意義上,較少的行並不一定意味着更好的代碼......您希望在哪些方面使代碼更好? – thkala
@thkala:並使用逗號運算符! – Cascabel