///////////////////////////////////////////////////////////////////////////// // stat.cc // // SIMLIB version: 2.18 // Date: 2004-01-25 // // Copyright (c) 1991-2004 Petr Peringer // // This library is licensed under GNU Library GPL. See the file COPYING. // // // class Stat implementation // //////////////////////////////////////////////////////////////////////////// // interface // #include "simlib.h" #include "internal.h" #include // sqrt() //////////////////////////////////////////////////////////////////////////// // implementation // SIMLIB_IMPLEMENTATION //////////////////////////////////////////////////////////////////////////// // operator () --- record value // void Stat::operator () (double x) { if (!this) SIMLIB_error(StatRefError); sx += x; sx2 += x*x; if(++n==1) min=max=x; else { if(xmax) max = x; } }; //////////////////////////////////////////////////////////////////////////// // constructors // Stat::Stat(const char *name) : sx(0), sx2(0), min(0), max(0), n(0) { dprintf(("Stat::Stat(\"%s\")",name)); SetName(name); } Stat::Stat() : sx(0), sx2(0), min(0), max(0), n(0) { dprintf(("Stat::Stat()")); } //////////////////////////////////////////////////////////////////////////// // destructor // Stat::~Stat() { dprintf(("Stat::~Stat() // \"%s\" ", Name())); } //////////////////////////////////////////////////////////////////////////// // Stat::Clear --- initialize // void Stat::Clear() { sx = sx2 = 0; // sums min = max = 0; n = 0; // # of records } //////////////////////////////////////////////////////////////////////////// // Stat::MeanValue // double Stat::MeanValue() const { if (n==0) SIMLIB_error(StatNoRecError); return sx/n; } //////////////////////////////////////////////////////////////////////////// // Stat::StdDev --- standard deviation // double Stat::StdDev() const { if (n<2) SIMLIB_error(StatDispError); double mv = sx/n; return sqrt((sx2-n*mv*mv)/(n-1)); } // end