00001
00002
00003
00004
00005
00006
00007 #include "SubsetStat.h"
00008
00009 #include <cmath>
00010 #include <iostream>
00011
00012 SubsetStat::SubsetStat()
00013 :size(0),
00014 sum(0.0),
00015 sum2(0.0)
00016 {
00017 }
00018
00019 void SubsetStat::Fill(const double &value)
00020 {
00021 size++;
00022 sum += value;
00023 sum2 += value*value;
00024 }
00025
00026
00027 double SubsetStat::GetMean() const
00028 {
00029 if(size < 1) return 0.0;
00030
00031
00032 const double mean = sum/double(size);
00033
00034 return mean;
00035 }
00036
00037 double SubsetStat::GetSigma() const
00038 {
00039 if(size < 2) return 0.0;
00040
00041
00042 const double size_tmp = size;
00043 const double sigma = (size_tmp*sum2 - sum*sum)/(size_tmp*(size_tmp-1.0));
00044
00045 if(sigma < 0.0)
00046 {
00047 std::cout << "Floating point error: sigma can not be negative!" << std::endl;
00048 return 0.0;
00049 }
00050
00051 return std::pow(sigma, 0.5);
00052 }
00053
00054 void SubsetStat::Reset()
00055 {
00056 size = 0;
00057 sum = 0.0;
00058 sum = 0.0;
00059 }