从整数向量中获取平均值

新手上路,请多包涵

我一直无法找到从 C++ 中的整数向量中获取平均值的方法。

我不可能开始添加所有值,因为我可能会超过接受的最大整数值。

我怎样才能有效和快速地计算这个? C++ 语言中是否有任何标准库可以做到这一点?

原文由 dimitris93 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 737
1 个回答

首选方法只是将足够宽的整数类型与 std::accumulate

 double avg1(std::vector<int> const& v) {
    return 1.0 * std::accumulate(v.begin(), v.end(), 0LL) / v.size();
}

如果 这个总和溢出(有 2300 万个整数,平均值必须至少为 4.01x10 11 - 也就是说,它不会溢出,因为它甚至不适合 int32_t .. . 所以你很好,但是如果你得到几个数量级的数字,或者有更宽的 int 类型),那么你可以改用常见的“在线”算法来计算意思是:

 double avg2(std::vector<int> const& v) {
    int n = 0;
    double mean = 0.0;
    for (auto x : v) {
        double delta = x - mean;
        mean += delta/++n;
    }
    return mean;
}

这不会溢出,不太容易损失精度,但由于重复的额外除法可能会更昂贵。

原文由 Barry 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题