可能重复:
C programming division
我正在尝试将值转换为Mel滤镜,但是,每次输出结果时,即使它是双精度,也始终为“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
任何帮助或建议?
答案 0 :(得分:5)
你的问题在
log10(1 + val / 700)
那是使用整数除法而不是实际除法。试试
log10(1 + val / 700.0)
答案 1 :(得分:3)
val
的类型是int。因此,使用整数运算来计算表达式val / 700
。结果是零。
答案 2 :(得分:2)
使用整数数字时,使用整数算术。这意味着任何小数都将向下舍入。将常量显式地写为十进制数,并使用双算术:
tmp = 2595.0 * log10(1.0 + val / 700.0);
答案 3 :(得分:2)
尝试
log10(1 + val / (float) 700)