这种算法会累积截断误差吗?

Will this algorithm accumulate truncation error?

提问人:Patrick Roberts 提问时间:5/3/2016 最后编辑:CommunityPatrick Roberts 更新时间:9/4/2017 访问量:59

问:

我计划编写一个第三方脚本,允许对网页进行评级系统,但我只希望它嵌入的每个网页在数据库中占据一行(或者更准确地说,因为我采用的是 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
      });
    }
  });
}

有没有办法改进算法以避免浮点值的截断错误,或者这首先不会成为问题?

JavaScript 算法 点精度 NoSQL

评论

0赞 stark 5/4/2016
不是所有的JS数字都是浮点数吗?
0赞 Patrick Roberts 5/4/2016
是的,他们是......我问这个程序是否会随着时间的推移累积截断误差,因为它每次更新时都会乘以平均值并除以总数。

答:

1赞 samgak 9/4/2017 #1

有没有办法改进算法以避免浮点值的截断错误,或者这首先不会成为问题?

是的。将所有评级的总和和评级数量以整数形式存储在数据库中,并且仅在显示时才从中计算平均值。