Class HyperGeometric

All Implemented Interfaces:
DoubleFunction, IntFunction, Serializable, Cloneable

public class HyperGeometric extends AbstractDiscreteDistribution
HyperGeometric distribution; See the math definition The hypergeometric distribution with parameters N, n and s is the probability distribution of the random variable X, whose value is the number of successes in a sample of n items from a population of size N that has s 'success' items and N - s 'failure' items.

p(k) = C(s,k) * C(N-s,n-k) / C(N,n) where C(a,b) = a! / (b! * (a-b)!).

valid for N >= 2, s,n invalid input: '<'= N.

Instance methods operate on a user supplied uniform random number generator; they are unsynchronized.

Static methods operate on a default uniform random number generator; they are synchronized.

Implementation: High performance implementation. Patchwork Rejection/Inversion method.

This is a port of hprsc.c from the C-RAND / WIN-RAND library. C-RAND's implementation, in turn, is based upon

H. Zechner (1994): Efficient sampling from continuous and discrete unimodal distributions, Doctoral Dissertation, 156 pp., Technical University Graz, Austria.

Version:
1.0, 09/24/99
See Also:
  • Field Details

    • my_N

      protected int my_N
    • my_s

      protected int my_s
    • my_n

      protected int my_n
    • N_last

      private int N_last
    • M_last

      private int M_last
    • n_last

      private int n_last
    • N_Mn

      private int N_Mn
    • m

      private int m
    • mp

      private int mp
    • b

      private int b
    • Mp

      private double Mp
    • np

      private double np
    • fm

      private double fm
    • k2

      private int k2
    • k4

      private int k4
    • k1

      private int k1
    • k5

      private int k5
    • dl

      private double dl
    • dr

      private double dr
    • r1

      private double r1
    • r2

      private double r2
    • r4

      private double r4
    • r5

      private double r5
    • ll

      private double ll
    • lr

      private double lr
    • c_pm

      private double c_pm
    • f1

      private double f1
    • f2

      private double f2
    • f4

      private double f4
    • f5

      private double f5
    • p1

      private double p1
    • p2

      private double p2
    • p3

      private double p3
    • p4

      private double p4
    • p5

      private double p5
    • p6

      private double p6
    • shared

      protected static HyperGeometric shared
  • Constructor Details

    • HyperGeometric

      public HyperGeometric(int N, int s, int n, RandomEngine randomGenerator)
      Constructs a HyperGeometric distribution.
  • Method Details

    • fc_lnpk

      private static double fc_lnpk(int k, int N_Mn, int M, int n)
    • hmdu

      protected int hmdu(int N, int M, int n, RandomEngine randomGenerator)
      Returns a random number from the distribution.
    • hprs

      protected int hprs(int N, int M, int n, RandomEngine randomGenerator)
      Returns a random number from the distribution.
    • nextInt

      public int nextInt()
      Returns a random number from the distribution.
      Specified by:
      nextInt in class AbstractDiscreteDistribution
    • nextInt

      public int nextInt(int N, int s, int n)
      Returns a random number from the distribution; bypasses the internal state.
    • nextInt

      protected int nextInt(int N, int M, int n, RandomEngine randomGenerator)
      Returns a random number from the distribution; bypasses the internal state.
    • pdf

      public double pdf(int k)
      Returns the probability distribution function.
    • setState

      public void setState(int N, int s, int n)
      Sets the parameters.
    • staticNextInt

      public static double staticNextInt(int N, int M, int n)
      Returns a random number from the distribution.
    • toString

      public String toString()
      Returns a String representation of the receiver.
      Overrides:
      toString in class Object
    • xstaticSetRandomGenerator

      private static void xstaticSetRandomGenerator(RandomEngine randomGenerator)
      Sets the uniform random number generated shared by all static methods.
      Parameters:
      randomGenerator - the new uniform random number generator to be shared.