[英]Double returns 0 [duplicate]
可能重复:
C程式设计师
我正在尝试将值转换为“ 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
有什么帮助或建议吗?
你的问题在
log10(1 + val / 700)
那是使用整数除法而不是实数除法。 试试看
log10(1 + val / 700.0)
val
的类型为int。 因此,表达式val / 700
用整数算术求值。 结果为零。
当您使用整数数字文字时,将使用整数算术。 这意味着所有小数将被四舍五入。 将常量显式写为十进制数字,并将使用双精度算术:
tmp = 2595.0 * log10(1.0 + val / 700.0);
尝试
log10(1 + val / (float) 700)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.