public static double AsVariance(this IEnumerable<double> source) {
source.ShouldNotBeNull("source");
double avg = 0;
double variance = 0;
long n = 0;
using(var iter = source.GetEnumerator())
while(iter.MoveNext()) {
var x = iter.Current;
n++;
x -= avg;
avg += x / n;
variance += (n - 1) * x * x / n;
}
return (n > 1) ? variance / (n - 1) : 0;
}