Здравствуйте, syrompe, Вы писали:
S>Они среднеквадратическое за два прохода считают что ли?
По исходнику — да. Ну это ж пример на пальцах.
S>Похоже и среднее тоже по методу "сложить и поделить" ...
В статье прямо над кодом StandardDeviation приведён код Average:
public static TResult Average<T, TResult>(IEnumerable<T> values)
where T : INumber<T>
where TResult : INumber<TResult>
{
TResult sum = Sum<T, TResult>(values);
return TResult.CreateChecked(sum) / TResult.CreateChecked(values.Count());
}
Ну, и код Sum тоже приведён:
public static TResult Sum<T, TResult>(IEnumerable<T> values)
where T : INumber<T>
where TResult : INumber<TResult>
{
TResult result = TResult.Zero;
foreach (var value in values)
{
result += TResult.CreateChecked(value);
}
return result;
}
Так что да — сложить и поделить. А вы бы что предложили? Меня в приведённых примерах беспокоит разве что потеря точности.