繁体   English   中英

双精度返回0 [重复]

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM