Standard Deviation LINQ extension method (with overloads)

public static class Extensions
    {
        public static double StdDevP(this IEnumerable<int> source)
        {
            return StdDevLogic(source, 0);
        }

        public static double StdDevP(this IEnumerable<double> source)
        {
            return StdDevLogic(source, 0);
        }

        public static double StdDevP(this IEnumerable<float> source)
        {
            return StdDevLogic(source, 0);
        }

        public static double StdDev(this IEnumerable<int> source)
        {
            return StdDevLogic(source);
        }

        public static double StdDev(this IEnumerable<double> source)
        {
            return StdDevLogic(source);
        }

        public static float StdDev(this IEnumerable<float> source)
        {
            return StdDevLogic(source);
        }

        private static double StdDevLogic(this IEnumerable<double> source, int buffer = 1)
        {
            if (source == null)
            { throw new ArgumentNullException("source"); }

            var data = source.ToList();
            var average = data.Average();
            var differences = data.Select(u => Math.Pow(average - u, 2.0)).ToList();
            return Math.Sqrt(differences.Sum() / (differences.Count() - buffer));
        }

        private static double StdDevLogic(this IEnumerable<int> source, int buffer = 1)
        {
            return StdDevLogic(source.Select(x => (double)x));
        }

        private static float StdDevLogic(this IEnumerable<float> source, int buffer = 1)
        {
            if (source == null)
            { throw new ArgumentNullException("source"); }
            var data = source.ToList();
            var average = data.Average();
            var differences = data.Select(u => Math.Pow(average - u, 2.0)).ToList();
            return (float)Math.Sqrt(differences.Sum() / (differences.Count() - buffer));
        }
    }
Example:
var nums1 = new[] { 11, 12, 13, 12, 13, 15, 12, 14, 15, 15, 12, 14, 15 };
            //Prints out the standard deviation of the entire data set (population)
            Console.WriteLine(nums1.StdDevP());
            //Prints out the standard deviation of the entire data set, but makes allowances for missing data points.
            Console.WriteLine(nums1.Take(10).StdDev());
            var nums2 = new[] { 11.0, 12.0, 13.0, 12.0, 13.0, 15.0, 12.0, 14.0, 15.0, 15.0, 12.0, 14.0, 15.0 };
            //Prints out the standard deviation of the entire data set (population)
            Console.WriteLine(nums2.StdDevP());
            //Prints out the standard deviation of the entire data set, but makes allowances for missing data points.
            Console.WriteLine(nums2.Take(10).StdDev());
            var nums3 = new[] { 11.0f, 12.0f, 13.0f, 12.0f, 13.0f, 15.0f, 12.0f, 14.0f, 15.0f, 15.0f, 12.0f, 14.0f, 15.0f };
            //Prints out the standard deviation of the entire data set (population)
            Console.WriteLine(nums3.StdDevP());
            //Prints out the standard deviation of the entire data set, but makes allowances for missing data points.
            Console.WriteLine(nums3.Take(10).StdDev());

Description

Typical standard deviation formula set in LINQ fluent syntax. For when Average, Min, and Max just aren't enough information. Works with int, double, float.

Details

Double click on the code to select all.

 

;