该算法会累积截断误差吗?
Will this algorithm accumulate truncation error?
我计划编写允许网页评级系统的第 3 方脚本,但我只希望它嵌入的每个网页在数据库中占据一行(或更准确地说是一个文档,因为我采取 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
});
}
});
}
有没有办法改进算法以避免浮点值的截断错误,或者这从一开始就不是问题吗?
Is there a way to improve the algorithm in order to avoid truncation error for floating point values, or will this not be a problem in the first place?
是的。将所有评分的总和和评分的数量作为整数存储在数据库中,并且只在显示时计算这些的平均值。
我计划编写允许网页评级系统的第 3 方脚本,但我只希望它嵌入的每个网页在数据库中占据一行(或更准确地说是一个文档,因为我采取 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
});
}
});
}
有没有办法改进算法以避免浮点值的截断错误,或者这从一开始就不是问题吗?
Is there a way to improve the algorithm in order to avoid truncation error for floating point values, or will this not be a problem in the first place?
是的。将所有评分的总和和评分的数量作为整数存储在数据库中,并且只在显示时计算这些的平均值。