任意の数のデータポイント(1億以上)に対する16ビット演算の平均二乗誤差を計算する必要があります。私は実行平均をとることにしたので、多数の二乗誤差を追加することによるオーバーフローについて心配する必要はありません。 1億個のサンプルでは、浮動小数点精度に問題があり(不正確な結果)、私は倍に移動しました。ここで実行中の平均値での浮動小数点精度の維持
は私のコード
int iDifference = getIdeal() - getValue();
m_iCycles++;
// calculate the running MSE as
// http://en.wikipedia.org/wiki/Moving_average
// MSE(i + 1) = MSE(i) + (E^2 - MSE(i))/(i + 1)
m_dMSE = m_dMSE + ((pow((double)iDifference,2) - m_dMSE)/(double)m_iCycles);
で精度を維持するために、これを実装するための良い方法はありますか?私は、MSEを1に正規化し、平均を計算するために完了時の最終的な除算との合計を単に維持することを検討した。
は、 'iDifference * iDifference'は速く' pow'コールよりも桁違いである可能性があります。 –
合意。私はそれを捕らえておくべきだった。感謝の印! –