2016-05-03 55 views
1

我打算編寫一個允許網頁評分系統的第三方腳本,但我只希望它嵌入的每個網頁在數據庫中佔用一行(或者更準確地說是一個文檔,因爲我正在採用NoSQL路線)。我的評價僞看起來就像這樣:該算法會累加截斷誤差嗎?

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

有沒有一種方法來改進算法,以避免截斷錯誤的浮點值,或者這不會是一個問題呢?

是的。將所有評級的總和和評級數量作爲整數存儲在數據庫中,並且只在計算出顯示它們時的平均值。