hmbdc
simplify-high-performance-messaging-programming
Stat.hpp
1 #include "hmbdc/Copyright.hpp"
2 #pragma once
3 
4 #include <ostream>
5 #include <cmath>
6 #include <limits>
7 #include <algorithm>
8 
9 namespace hmbdc { namespace numeric {
10 template <typename T>
11 struct Stat {
12  Stat()
13  : min_(std::numeric_limits<T>::max())
14  , max_(std::numeric_limits<T>::min())
15  , sum_(0)
16  , sumSq_(0)
17  , sampleSize_(0ul)
18  {}
19 
20  void add(T sample) {
21  ++sampleSize_;
22  sum_ += sample;
23  sumSq_ += double(sample) * double(sample);
24  min_ = std::min(min_, sample);
25  max_ = std::max(max_, sample);
26  }
27 
28  size_t sampleSize() const {
29  return sampleSize_;
30  }
31 
32  friend
33  std::ostream& operator << (std::ostream& os, Stat const& st) {
34  using namespace std;
35  if (st.sampleSize_) {
36  os << "mean=" << st.sum_ / st.sampleSize_
37  << " std_dev=" << sqrt((st.sumSq_ - double(st.sum_) * double(st.sum_) / st.sampleSize_) / st.sampleSize_)
38  << " min=" << st.min_ << " max=" << st.max_
39  << " sampleSize=" << st.sampleSize_ << endl;
40  } else {
41  os << "NA sampleSize=" << st.sampleSize_ << endl;
42  }
43  return os;
44  }
45 private:
46  T min_;
47  T max_;
48  T sum_;
49  double sumSq_;
50  size_t sampleSize_;
51 };
52 
53 }}
54 
55 
Definition: TypedString.hpp:84
Definition: Base.hpp:12
Definition: Stat.hpp:11