Simplify.

This commit is contained in:
Steve Checkoway
2006-12-28 03:00:20 +00:00
parent 23645ba30b
commit f7e7bea9a8
+7 -11
View File
@@ -1002,31 +1002,27 @@ float calc_stddev( const float *pStart, const float *pEnd, bool bSample )
bool CalcLeastSquares( const vector< pair<float, float> > &vCoordinates, bool CalcLeastSquares( const vector< pair<float, float> > &vCoordinates,
float &pfSlope, float &pfIntercept, float &pfError ) float &pfSlope, float &pfIntercept, float &pfError )
{ {
int iNumSamples = vCoordinates.size(); if( vCoordinates.empty() )
float fNumSamples = static_cast<float>(iNumSamples);
if( iNumSamples == 0 )
{
return false; return false;
}
float fSumXX = 0.0f, fSumXY = 0.0f, fSumX = 0.0f, fSumY = 0.0f; float fSumXX = 0.0f, fSumXY = 0.0f, fSumX = 0.0f, fSumY = 0.0f;
for( int i = 0; i < iNumSamples; ++i ) for( unsigned i = 0; i < vCoordinates.size(); ++i )
{ {
fSumXX += vCoordinates[i].first * vCoordinates[i].first; fSumXX += vCoordinates[i].first * vCoordinates[i].first;
fSumXY += vCoordinates[i].first * vCoordinates[i].second; fSumXY += vCoordinates[i].first * vCoordinates[i].second;
fSumX += vCoordinates[i].first; fSumX += vCoordinates[i].first;
fSumY += vCoordinates[i].second; fSumY += vCoordinates[i].second;
} }
float fDenominator = fNumSamples * fSumXX - fSumX * fSumX; const float fDenominator = vCoordinates.size() * fSumXX - fSumX * fSumX;
pfSlope = (fNumSamples * fSumXY - fSumX * fSumY) / fDenominator; pfSlope = (vCoordinates.size() * fSumXY - fSumX * fSumY) / fDenominator;
pfIntercept = (fSumXX * fSumY - fSumX * fSumXY) / fDenominator; pfIntercept = (fSumXX * fSumY - fSumX * fSumXY) / fDenominator;
pfError = 0.0f; pfError = 0.0f;
for( int i = 0; i < iNumSamples; ++i ) for( unsigned i = 0; i < vCoordinates.size(); ++i )
{ {
float fOneError = (vCoordinates[i].second - (pfIntercept + pfSlope * vCoordinates[i].first)); const float fOneError = pfIntercept + pfSlope * vCoordinates[i].first - vCoordinates[i].second;
pfError += fOneError * fOneError; pfError += fOneError * fOneError;
} }
pfError /= fNumSamples; pfError /= vCoordinates.size();
pfError = sqrtf( pfError ); pfError = sqrtf( pfError );
return true; return true;
} }