/// <summary>
        /// Compares a given SufficientStatistics object with the current object.
        /// </summary>
        /// <param name="stats">SufficientStatistics object to be compared</param>
        /// <returns>True if both the objects are equal.</returns>
        public override bool Equals(SufficientStatistics stats)
        {
            if (stats == null)
            {
                throw new ArgumentNullException("stats");
            }

            if (stats.IsMissing())
            {
                return(IsMissing());
            }
            else if (stats is BooleanStatistics)
            {
                return(_value == stats.AsBooleanStatistics()._value);
            }
            else
            {
                return(stats.Equals(this));
            }
        }
        /// <summary>
        /// Compares Sufficient Statistics with Discrete Statistics and Boolean Statistics.
        /// </summary>
        /// <param name="stats">Sufficient Statistics.</param>
        /// <returns>Returns true if equal.</returns>
        public override bool Equals(SufficientStatistics stats)
        {
            if (stats == null)
            {
                return(false);
            }

            if (IsMissing() && stats.IsMissing())
            {
                return(true);
            }
            else if (stats is DiscreteStatistics)
            {
                return(this.Value == stats.AsDiscreteStatistics().Value);
            }
            else if (stats is BooleanStatistics)
            {
                return(this.Value == stats.AsDiscreteStatistics().Value);
            }
            else
            {
                return(stats.Equals(this));
            }
        }