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

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

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

            default:
            {
                throw new DistributionsInvalidOperationException();
            }
            }
        }
        internal override BaseDistribution InnerGetProduct(BaseDistribution value)
        {
            switch (value.InnerDistributionType)
            {
            case DistributionType.Continious:
            case DistributionType.Discrete:
            {
                return(Discretize() * value);
            }

            case DistributionType.Number:
            {
                if (value.InnerMean == 0)
                {
                    throw new DistributionsInvalidOperationException(DistributionsInvalidOperationExceptionType.MultiplyRandomByZero);
                }

                return(ContinuousRandomMath.Multiply(this, (double)value));
            }

            default:
                throw new DistributionsInvalidOperationException();
            }
        }