Willcode4cash icon

Math Extensions

Willcode4cash | PRO | 09/17/16 11:51:34 AM UTC | 0 ⭐ | 273 👁️ | Never ⏰ | []
C# |

4.65 KB

|

None

|

0 👍

/

0 👎

namespace MyApp.Extensions
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
 
    public static class MathExtensions
    {
        /// <summary>Calculates the Standard Deviation for the collection of integers.</summary>
        /// <param name="collection">The collection.</param>
        /// <returns>A double.</returns>
        public static double StandardDeviation(this IEnumerable<int> collection)
        {
            return CalculateStandardDeviation(collection);
        }
 
        /// <summary>Calculates the Standard Deviation for the collection of double.</summary>
        /// <param name="collection">The collection.</param>
        /// <returns>A double.</returns>
        public static double StandardDeviation(this IEnumerable<double> collection)
        {
            return CalculateStandardDeviation(collection);
        }
 
        /// <summary>Calculates the Standard Deviation for the collection of floats.</summary>
        /// <param name="collection">The collection.</param>
        /// <returns>A float.</returns>
        public static float StandardDeviation(this IEnumerable<float> collection)
        {
            return CalculateStandardDeviation(collection);
        }
 
        /// <summary>Calculates the Standard DeviationP for the collection of integers.</summary>
        /// <param name="collection">The collection.</param>
        /// <returns>A double.</returns>
        public static double StandardDeviationP(this IEnumerable<int> collection)
        {
            return CalculateStandardDeviation(collection);
        }
 
        /// <summary>Calculates the Standard DeviationP for the collection of doubles.</summary>
        /// <param name="collection">The collection.</param>
        /// <returns>A double.</returns>
        public static double StandardDeviationP(this IEnumerable<double> collection)
        {
            return CalculateStandardDeviation(collection, 0);
        }
 
        /// <summary>Calculates the Standard Deviation for the collection of floats.</summary>
        /// <param name="collection">The collection.</param>
        /// <returns>A double.</returns>
        public static double StandardDeviationP(this IEnumerable<float> collection)
        {
            return CalculateStandardDeviation(collection, 0);
        }
 
        /// <summary>Calculates the Standard Deviation for the collection of doubles.</summary>
        /// <exception cref="ArgumentNullException">Thrown when one or more required arguments are null.</exception>
        /// <param name="collection">The collection.</param>
        /// <param name="buffer">    Buffer size(Optional)</param>
        /// <returns>The calculated standard deviation.</returns>
        ///
        /// ### <exception cref="System.ArgumentNullException">Indicates a null collection.</exception>
        private static double CalculateStandardDeviation(this IEnumerable<double> collection, int buffer = 1)
        {
            if (collection == null) throw new ArgumentNullException("collection");
 
            var data = collection.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));
        }
 
        /// <summary>Standards the deviation p.</summary>
        /// <param name="collection">The collection.</param>
        /// <returns>The calculated standard deviation.</returns>
        private static double CalculateStandardDeviation(this IEnumerable<int> collection)
        {
            return CalculateStandardDeviation(collection.Select(x => (double)x));
        }
 
        /// <summary>Standards the deviation p.</summary>
        /// <exception cref="ArgumentNullException">Thrown when one or more required arguments are null.</exception>
        /// <param name="collection">The collection.</param>
        /// <param name="buffer">    Buffer size(Optional)</param>
        /// <returns>The calculated standard deviation.</returns>
        ///
        /// ### <exception cref="System.ArgumentNullException">Indicates a null collection.</exception>
        private static float CalculateStandardDeviation(this IEnumerable<float> collection, int buffer = 1)
        {
            if (collection == null) throw new ArgumentNullException("collection");
 
            var data = collection.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));
        }
    }
}

Comments