看板 C_and_CPP 關於我們 聯絡資訊
小弟現在做個訊號處理的計算,問題如下。 有個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
sunneo:牛人 ? (GNU上的那的圖示嗎 XDrz) 04/04 00:16
james732:把 Coref 變成參數 做不做 GauCoeff 讓 main 決定? 04/04 00:18
ewn:牛人是大陸用語的高手... 04/04 01:10
zhi5566:為什麼你設了static就不會再做復利業? 04/04 02:04
zhi5566:照程式碼看來coeff會被算n次 04/04 02:05
weiyucsie:因為那個函數是放在設定初值的地方吧。 04/04 02:20
weiyucsie:static real *Coeff = GauCoeff(L); 04/04 02:20
weiyucsie:不過感覺當成參數傳,似乎不錯?(感覺要改比較方便) 04/04 02:21
zhi5566:阿對static有這用法 但沒看過這樣用 而且效能會變差 04/04 16:21
zhi5566:static一般用在需累加減數 不希望函數消失值就消失 04/04 16:25
zhi5566:如果是做二維就用global值傳參數 放在n loop上 04/04 16:27
※ 編輯: Carbontube 來自: 218.167.78.235 (04/04 19:51)