我一直找不到从C ++中的整数向量中获取平均值的方法。
我可能无法开始添加所有值,因为我可能会超过最大整数接受值。
我怎样才能有效而迅速地计算出这个?是否有使用C ++语言编写的标准库?
可行的方法只是用一个足够宽的整数类型求和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;
}
这不会溢出,也不很容易失去精度,但是由于重复的额外除法可能会更昂贵。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句