双返0

时间:2012-12-04 20:53:05

标签: c++ double

  

可能重复:
  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

任何帮助或建议?

4 个答案:

答案 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)