Class KempSmallMeanPoissonSampler

java.lang.Object
org.apache.commons.rng.sampling.distribution.KempSmallMeanPoissonSampler
All Implemented Interfaces:
DiscreteSampler, SharedStateDiscreteSampler, SharedStateSampler<SharedStateDiscreteSampler>

public final class KempSmallMeanPoissonSampler extends Object implements SharedStateDiscreteSampler
Sampler for the Poisson distribution.
  • Kemp, A, W, (1981) Efficient Generation of Logarithmically Distributed Pseudo-Random Variables. Journal of the Royal Statistical Society. Vol. 30, No. 3, pp. 249-253.

This sampler is suitable for mean < 40. For large means, LargeMeanPoissonSampler should be used instead.

Note: The algorithm uses a recurrence relation to compute the Poisson probability and a rolling summation for the cumulative probability. When the mean is large the initial probability (Math.exp(-mean)) is zero and an exception is raised by the constructor.

Sampling uses 1 call to UniformRandomProvider.nextDouble(). This method provides an alternative to the SmallMeanPoissonSampler for slow generators of double.

Since:
1.3
See Also:
  • Field Details

    • rng

      private final UniformRandomProvider rng
      Underlying source of randomness.
    • p0

      private final double p0
      Pre-compute Math.exp(-mean). Note: This is the probability of the Poisson sample p(x=0).
    • mean

      private final double mean
      The mean of the Poisson sample.
  • Constructor Details

    • KempSmallMeanPoissonSampler

      private KempSmallMeanPoissonSampler(UniformRandomProvider rng, double p0, double mean)
      Parameters:
      rng - Generator of uniformly distributed random numbers.
      p0 - Probability of the Poisson sample p(x=0).
      mean - Mean.
  • Method Details