internal override BaseDistribution InnerGetSumm(BaseDistribution value)
        {
            switch (value.InnerDistributionType)
            {
            case DistributionType.Number:
            {
                return(Mean + value.InnerMean);
            }

            case DistributionType.Continious:
            {
                return(ContinuousRandomMath.Add((ContinuousDistribution)value, Mean));
            }

            case DistributionType.Discrete:
            {
                return(DiscreteRandomMath.Add((DiscreteDistribution)value, Mean));
            }

            default:
            {
                throw new DistributionsInvalidOperationException();
            }
            }
        }
        internal override BaseDistribution InnerGetLog(BaseDistribution nBase)
        {
            switch (nBase.InnerDistributionType)
            {
            case DistributionType.Number:
            {
                return(CommonRandomMath.Log(this, (double)nBase));
            }

            case DistributionType.Continious:
            {
                return(DiscreteRandomMath.Log(Discretize(), (DiscreteDistribution)(ContinuousDistribution)nBase));
            }

            case DistributionType.Discrete:
            {
                return(DiscreteRandomMath.Log(Discretize(), (DiscreteDistribution)nBase));
            }

            default:
            {
                throw new DistributionsInvalidOperationException();
            }
            }
        }
        internal override BaseDistribution InnerGetRatio(BaseDistribution value)
        {
            switch (value.InnerDistributionType)
            {
            case DistributionType.Number:
            {
                return(DiscreteRandomMath.Divide(this, (double)value));
            }

            case DistributionType.Discrete:
            {
                return(DiscreteRandomMath.Divide(this, (DiscreteDistribution)value));
            }

            case DistributionType.Continious:
            {
                return(DiscreteRandomMath.Divide(this, (DiscreteDistribution)(ContinuousDistribution)value));
            }

            default:
            {
                throw new DistributionsInvalidOperationException();
            }
            }
        }
 internal override BaseDistribution InnerGetNegate()
 {
     return(DiscreteRandomMath.Negate(this));
 }