[問題] 請問這情況要如何處理?

看板C_and_CPP (C/C++)作者 (碳管)時間16年前 (2009/04/04 00:06), 編輯推噓1(1010)
留言11則, 5人參與, 最新討論串1/1
小弟現在做個訊號處理的計算,問題如下。 有個function 會被呼叫n次(n~ pow(10,7) ),n為一訊號的點數 而function裡用到一些coefficient 會用到(快速)傅立業求得 #define real double typedef struct Complex { real Re; real Im; }complex; int main(void) { : for(int i =0;i<n;i++){ // some procedure ConvolutionGaussian(L,fs,fw); }//for : : }//main void ConvolutionGaussian(L,*fs, *fw) { static real *Coeff = GauCoeff(L); for(int i = 0;i< L;i++) { //Convolution procedure : // fw = Sum (GauCoeff*fs) }//i }//ConvolutionGaussian GauCeoff()這函式裡面用到(快速)傅立業 而對整個在main中的回圈(做n次)而言 這些Coeff全都一樣,所以把這變數設為static 現在問題是... 若外面的main 做這種處理超過一次(也就是不只一個forloop,好比處理兩條訊號) 這樣Coeff會不同,但在ConvolutionGaussian中Coeff已被設為static .. 那請問怎樣處理呢? 若不把Coeff設為 static ,則每做一個點就要做一次傅立業,計算量會過度 旁大。。 有牛人可幫解一下嗎 ,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.167.78.235

04/04 00:16, , 1F
牛人 ? (GNU上的那的圖示嗎 XDrz)
04/04 00:16, 1F

04/04 00:18, , 2F
把 Coref 變成參數 做不做 GauCoeff 讓 main 決定?
04/04 00:18, 2F

04/04 01:10, , 3F
牛人是大陸用語的高手...
04/04 01:10, 3F

04/04 02:04, , 4F
為什麼你設了static就不會再做復利業?
04/04 02:04, 4F

04/04 02:05, , 5F
照程式碼看來coeff會被算n次
04/04 02:05, 5F

04/04 02:20, , 6F
因為那個函數是放在設定初值的地方吧。
04/04 02:20, 6F

04/04 02:20, , 7F
static real *Coeff = GauCoeff(L);
04/04 02:20, 7F

04/04 02:21, , 8F
不過感覺當成參數傳,似乎不錯?(感覺要改比較方便)
04/04 02:21, 8F

04/04 16:21, , 9F
阿對static有這用法 但沒看過這樣用 而且效能會變差
04/04 16:21, 9F

04/04 16:25, , 10F
static一般用在需累加減數 不希望函數消失值就消失
04/04 16:25, 10F

04/04 16:27, , 11F
如果是做二維就用global值傳參數 放在n loop上
04/04 16:27, 11F
※ 編輯: Carbontube 來自: 218.167.78.235 (04/04 19:51)
文章代碼(AID): #19rZGBBc (C_and_CPP)
文章代碼(AID): #19rZGBBc (C_and_CPP)