/// <inheritdoc/>
        public new double logProbability(int x)
        {
            double ret;

            int[] domain = getDomain(populationSize, numberOfSuccesses, sampleSize);
            if (x < domain[0] || x > domain[1])
            {
                ret = Double.NegativeInfinity;
            }
            else
            {
                double p  = (double)sampleSize / (double)populationSize;
                double q  = (double)(populationSize - sampleSize) / (double)populationSize;
                double p1 = SaddlePointExpansion.logBinomialProbability(x,
                                                                        numberOfSuccesses, p, q);
                double p2 =
                    SaddlePointExpansion.logBinomialProbability(sampleSize - x,
                                                                populationSize - numberOfSuccesses, p, q);
                double p3 =
                    SaddlePointExpansion.logBinomialProbability(sampleSize, populationSize, p, q);
                ret = p1 + p2 - p3;
            }

            return(ret);
        }
        /// <inheritdoc/>
        public new double logProbability(int x)
        {
            if (numberOfTrials == 0)
            {
                return((x == 0) ? 0d : Double.NegativeInfinity);
            }
            double ret;

            if (x < 0 || x > numberOfTrials)
            {
                ret = Double.NegativeInfinity;
            }
            else
            {
                ret = SaddlePointExpansion.logBinomialProbability(x,
                                                                  numberOfTrials, probabilityOfSuccess,
                                                                  1.0 - probabilityOfSuccess);
            }
            return(ret);
        }