00001 /* average.h 00002 */ 00003 #ifndef _AVERAGE_H 00004 #define _AVERAGE_H 00005 00006 namespace osl 00007 { 00008 namespace stat 00009 { 00013 class Average 00014 { 00015 double mean; 00016 int elements; 00017 public: 00018 // CREATORS 00019 Average() : mean(0), elements(0) 00020 { 00021 } 00022 // MANIPULATORS 00027 double add(const double& x) 00028 { 00029 ++elements; 00030 const double diff = x - mean; 00031 mean += diff/elements; 00032 return diff; 00033 } 00034 void merge(const Average& r) 00035 { 00036 if (r.elements == 0) 00037 return; 00038 const double sum = mean*elements + r.mean*r.elements; 00039 elements += r.elements; 00040 mean = sum / elements; 00041 } 00042 void clear(double a=0.0, int e=0) 00043 { 00044 mean = a; 00045 elements = e; 00046 } 00047 // ACCESSORS 00048 double average() const { return mean; } 00049 int numElements() const { return elements; } 00050 }; 00051 } // namespace stat 00052 using stat::Average; 00053 } // namespace osl 00054 00055 00056 #endif /* _AVERAGE_H */ 00057 // ;;; Local Variables: 00058 // ;;; mode:c++ 00059 // ;;; c-basic-offset:2 00060 // ;;; End: