/* Calculate the running standard deviation. This means we only need to run through the data once. Whereas other methods require the mean of the values first, hence a previous run. */ double CSdDlg::CalcSD() { int iSample = 0; double dRunningMeanSquared = 0.0; double dRunningTotal = 0.0; double dRunningTotalSquared = 0.0; double dSD = 0.0; for(int i = 0;i < m_dValues.GetSize();i++) { iSample++; double dValue = m_dValues.GetAt(i); dRunningTotalSquared += (dValue * dValue); dRunningTotal += dValue; dRunningMeanSquared = (dRunningTotal * dRunningTotal) / iSample; dSD = sqrt( ((1.0 / iSample) * (dRunningTotalSquared - dRunningMeanSquared)) ); TRACE("SD = %f\n",dSD); } return dSD; }