2016-05-03 9 views
1

私はWebページの評価システムを可能にするサードパーティのスクリプトを書くことを計画していますが、私はNoSQLを取っているので、データベース内の1つの行(または、ルート)。評価のための私の擬似コードは次のようになります。このアルゴリズムは切り捨てエラーを累積しますか?

function update(page, rate) { 
    collection.get({ 
    page: page 
    }, function callback(err, doc) { 
    if (!err) { 
     var rating = doc.rating, 
     votes = doc.votes; 

     collection.update({ 
     page: page 
     }, { 
     votes: votes + 1, 
     rating: (rating * votes + rate)/(votes + 1) // here's the iffy part 
     }); 
    } 
    }); 
} 

浮動小数点値のために切り捨てエラーを回避するために、アルゴリズムを改善する方法はありますか、これは最初の場所で問題になることはありませんか?

+0

JS番号はすべて浮動小数点ではありませんか? – stark

+0

はい、彼らは...私はこのプログラムが平均を乗算し、更新が発生するたびに合計を分割するので、このプログラムが時間の経過とともに切り捨てエラーを累積するかどうか尋ねています。 –

答えて

1

浮動小数点値の切り捨てエラーを回避するためにアルゴリズムを改善する方法はありますか?これは最初は問題ではありませんか?

はい。すべてのレーティングとレーティング数の合計をデータベースに整数として格納し、表示するときには平均値のみを計算します。

関連する問題