Fix standard deviation calculation. This could probably be done using accumulate, multiplies, minus, bind2nd, distance, and compose2, but that's probably less clear.

Something like
float fMean = calc_mean( pStart, pEnd );
return sqrtf( accumulate(pStart, pEnd, 0.0f, compose2(multiplies<float>(), bind2nd(minus<float>(), fMean), bind2nd(minus<float>(), fMean))) / distance(pStart, pEnd) );
These are easily templated too, if necessary.
This commit is contained in:
Steve Checkoway
2006-07-08 07:49:42 +00:00
parent 8c9577ffe9
commit d2429cb63b
+1 -1
View File
@@ -946,7 +946,7 @@ float calc_stddev( const float *pStart, const float *pEnd )
float fDev = 0.0f;
for( const float *i=pStart; i != pEnd; ++i )
fDev += (*i - fMean) * (*i - fMean);
fDev /= distance( pStart, pEnd ) - 1;
fDev /= distance( pStart, pEnd );
fDev = sqrtf( fDev );
return fDev;