Beispiel #1
0
        public static double Variance(this IEnumerable <double> source)
        {
            if (source == null)
            {
                throw new ArgumentNullException(NameOf.GetCallerName() + ": source");
            }

            long   n    = 0;
            double mean = 0;
            double M2   = 0;

            checked
            {
                foreach (double x in source)
                {
                    n++;
                    double delta = x - mean;
                    mean += delta / n;
                    M2   += delta * (x - mean);
                }
            }

            if (source.Count() < 2)
            {
                if (source.Count() == 1)
                {
                    return(double.NaN);
                }

                //TODO : Exception
                throw new InvalidOperationException(NameOf.GetCallerName() + ": source contains no elements.");
            }

            return((double)(M2 / (n - 1)));
        }