小编AbG*_*tor的帖子

快速计算RMS给出了Java中的NaNs - 浮点错误?

用浮点数做数学时,我得到了一个令人困惑的结果.我的代码永远不会产生负数,产生负数,当我尝试取平方根时会导致NaN.

此代码似乎在测试中非常有效.然而,当在真实世界(即可能非常小的,七个和八个负指数)数字上操作时,最终总和变为负,导致NaN.理论上,减法步骤只删除已添加到的数字sum; 这是一个浮点错误问题吗?有没有办法解决它?

代码:

public static float[] getRmsFast(float[] data, int halfWindow) {
    int n = data.length;
    float[] result = new float[n];
    float sum = 0.000000000f;
    for (int i=0; i<2*halfWindow; i++) {
        float d = data[i];
        sum += d * d;
    }
    result[halfWindow] = calcRms(halfWindow, sum);

    for (int i=halfWindow+1; i<n-halfWindow; i++) {
        float oldValue = data[i-halfWindow-1];
        float newValue = data[i+halfWindow-1];
        sum -= (oldValue*oldValue);
        sum += (newValue*newValue);
        float rms = calcRms(halfWindow, sum);
        result[i] = rms;
    }

    return result;
}

private …
Run Code Online (Sandbox Code Playgroud)

java algorithm math floating-point nan

2
推荐指数
1
解决办法
1433
查看次数

标签 统计

algorithm ×1

floating-point ×1

java ×1

math ×1

nan ×1