freebsd-ports/science/omnetpp/files/patch-src-sim-cstat.cc
Pav Lucistnik be6d1897da - Bugfixes
- Shared libraries moved from ${PREFIX}/lib/${PORTNAME} to ${PREFIX}/lib

PR:		ports/76717
Submitted by:	Bjorn Konig <bkoenig@cs.tu-berlin.de> (maintainer)
2005-01-29 13:39:20 +00:00

65 lines
1.8 KiB
C++

--- src/sim/cstat.cc 2003-06-25 17:38:24.000000000 +0200
+++ src/sim/cstat.cc 2004-11-19 12:23:03.000000000 +0100
@@ -252,8 +252,31 @@
void cWeightedStdDev::collect2(double val, double weight)
{
- cStdDev::collect(weight*val);
+ // Lars Westerhoff: collect weight*val*val for sqrsum_samples for variance
+
+ if (++num_samples <= 0)
+ {
+ // FIXME: num_samples overflow: issue warning and must stop collecting!
+ ev.printf("\a\nWARNING: (%s)%s: observation count overflow!\n\n",className(),fullPath());
+ }
+ sum_samples+=weight*val;
+ sqrsum_samples+=weight*val*val;
sum_weights += weight;
+
+ if (num_samples>1)
+ {
+ if (val<min_samples)
+ min_samples=val;
+ else if (val>max_samples)
+ max_samples=val;
+ }
+ else
+ {
+ min_samples=max_samples=val;
+ }
+
+ if (transientDetectionObject()) td->collect(val); //NL
+ if (accuracyDetectionObject()) ra->collect(val); //NL
}
void cWeightedStdDev::clearResult()
@@ -264,18 +287,18 @@
double cWeightedStdDev::variance() const
{
- throw new cException(this, "variance()/stddev() not implemented");
+ // Lars Westerhoff
- // if (sum_weights==0)
- // return 0.0;
- // else
- // {
- // double devsqr = (sqrsum_samples - sum_samples*sum_samples/sum_weights)/(sum_weights-1);
- // if (devsqr<=0)
- // return 0.0;
- // else
- // return devsqr;
- //}
+ if (sum_weights==0)
+ return 0.0;
+ else
+ {
+ double devsqr = (sqrsum_samples - sum_samples*sum_samples/sum_weights)/(sum_weights); // sum_weights-1 ???
+ if (devsqr<=0)
+ return 0.0;
+ else
+ return devsqr;
+ }
}
void cWeightedStdDev::saveToFile(FILE *f) const