Ответ Dynami работает, но делает несколько проходов по данным, чтобы получить результат. Это однопроходный метод, который вычисляет стандартное отклонение выборки :
public static double StdDev(this IEnumerable<double> values)
{
// ref: http://warrenseen.com/blog/2006/03/13/how-to-calculate-standard-deviation/
double mean = 0.0;
double sum = 0.0;
double stdDev = 0.0;
int n = 0;
foreach (double val in values)
{
n++;
double delta = val - mean;
mean += delta / n;
sum += delta * (val - mean);
}
if (1 < n)
stdDev = Math.Sqrt(sum / (n - 1));
return stdDev;
}
Это стандартное отклонение образца , поскольку оно делится на n - 1
. Для нормального стандартного отклонения вам нужно вместо этого делить на n
.
При этом используется метод Уэлфорда , который имеет более высокую числовую точность по сравнению с методом Average(x^2)-Average(x)^2
.