variance function

double variance(
  1. Iterable<num> values, {
  2. bool isPopulation = false,
})

Variance, standard deviation, median, percentile. Roadmap #122–125.

Implementation

double variance(Iterable<num> values, {bool isPopulation = false}) {
  final List<num> list = values.toList();
  if (list.isEmpty) return 0;
  final double mean = list.fold<double>(0, (double s, num v) => s + v.toDouble()) / list.length;
  final double sumSq = list.fold<double>(0, (double s, num v) {
    final double d = v.toDouble() - mean;
    final double dSq = math.pow(d, 2).toDouble();
    return s + dSq;
  });
  final int n = isPopulation ? list.length : list.length - 1;
  return n <= 0 ? 0 : sumSq / n;
}