2012-12-04 223 views
0

可能重複:
C programming division雙返回0

我試圖值轉換成梅爾濾波器,但是,我每次輸出的結果,它始終爲「0」,甚至儘管它是雙重的。它應該是一個浮動嗎?這裏是關於方程的文章:http://en.wikipedia.org/wiki/Mel_scale

這裏是功能:

double MFCC::mel_filter(int val) 
{ 
    double tmp; 
    tmp = 2595 * log10(1 + val/700); 
    cout << tmp << endl; 
    return tmp; 
    } 

    vector<double> MFCC::mel_frame(int size) 
    { 
    vector<double> mel_Frame; 
    for(int i=1; (i < size); i++) 
    { 
      this->mel_filter(i); 
    } 

    return mel_Frame; 
    } 

在主,我會傳遞值如..(1,2,3,4,5,6,7 ......)

如果 「1」 被輸入,則公式爲:

m = 2595 * log10(1 + 1/700) = 1.6 

任何幫助或建議?

+3

讓你的價值觀雙打,而不是整數。即2595.0,1.0,700.0 – Bart

+0

嘗試'1 + val/700.0' - '/'是整數除法,如果兩個操作數都是整數 – nvlass

+0

這是值得的,雖然你聲明並返回'矢量 mel_Frame;',你永遠不會實際寫任何值進入它。您的功能將始終返回一個空矢量。 – meagar

回答

5

你的問題是在

log10(1 + val/700) 

這是使用整數除法,而不是一個真正的分裂。試用

log10(1 + val/700.0) 
3

val的類型是int。所以表達式val/700用整數算術進行評估。結果爲零。

2

使用整數數字時,使用整數算術。這意味着任何小數將被捨去。明確寫入常量爲小數,雙算術將用於:

tmp = 2595.0 * log10(1.0 + val/700.0); 
2

嘗試

log10(1 + val/(float) 700)