/// <summary>
        /// Try Parse the value.
        /// </summary>
        /// <param name="val">The Value.</param>
        /// <param name="result">Sufficient Statistics result.</param>
        /// <returns>Returns true if parsed properly.</returns>
        new public static bool TryParse(string val, out SufficientStatistics result)
        {
            result = null;
            if (string.IsNullOrEmpty(val))
            {
                result = GetMissingInstance;
                return(false);
            }
            else
            {
                string[] fields = val.Split(',');
                if (!(fields.Length == 3))
                {
                    return(false);
                }
                double mean, variance;
                int    sampleSize;

                if (double.TryParse(fields[0], out mean) &&
                    double.TryParse(fields[1], out variance) &&
                    int.TryParse(fields[2], out sampleSize))
                {
                    result = GaussianStatistics.GetInstance(mean, variance, sampleSize);
                    return(true);
                }

                return(false);
            }
        }
        /// <summary>
        /// Add two Gaussian Statistics.
        /// </summary>
        /// <param name="x">GaussianStatistics x.</param>
        /// <param name="y">GaussianStatistics y.</param>
        /// <returns>Returns added result of two Gaussian Statistics.</returns>
        public static GaussianStatistics Add(GaussianStatistics x, GaussianStatistics y)
        {
            if (x == null)
            {
                throw new ArgumentNullException("x");
            }

            if (y == null)
            {
                throw new ArgumentNullException("y");
            }

            int    rN    = x.SampleSize + y.SampleSize;
            double rMean = (x.SampleSize * x.Mean + y.SampleSize * y.Mean) / rN;
            double rVar  = (x.SumOfSquares + y.SumOfSquares) / rN - rMean * rMean;

            if (rVar < 0)
            {
                Helper.CheckCondition(rVar > -1e-10, "Computed negative variance! " + rVar);
                rVar = 0;
            }

            GaussianStatistics result = GaussianStatistics.GetInstance(rMean, rVar, rN);

            return(result);
        }
 /// <summary>
 /// Converts current object As Gaussian Statistics.
 /// </summary>
 /// <returns>Gaussian Statistics.</returns>
 public override GaussianStatistics AsGaussianStatistics()
 {
     return(IsMissing() ? GaussianStatistics.GetMissingInstance : GaussianStatistics.GetInstance(Value, 0, 1));
 }