sim.util.distribution

## Class Binomial

• All Implemented Interfaces:
java.io.Serializable

```public class Binomial
extends AbstractDiscreteDistribution```
Binomial distribution; See the math definition and animated definition.

p(x) = k * p^k * (1-p)^(n-k) with k = n! / (k! * (n-k)!).

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. Acceptance Rejection/Inversion method. This is a port of RandBinomial used in CLHEP 1.4.0 (C++). CLHEP's implementation is, in turn, based on

V. Kachitvichyanukul, B.W. Schmeiser (1988): Binomial random variate generation, Communications of the ACM 31, 216-222.

Serialized Form
• ### Field Summary

Fields
Modifier and Type Field and Description
`protected int` `n`
`protected double` `p`
• ### Fields inherited from class sim.util.distribution.AbstractDistribution

`randomGenerator`
• ### Constructor Summary

Constructors
Constructor and Description
```Binomial(int n, double p, MersenneTwisterFast randomGenerator)```
Constructs a binomial distribution.
• ### Method Summary

Methods
Modifier and Type Method and Description
`double` `cdf(int k)`
Returns the cumulative distribution function.
`protected int` ```generateBinomial(int n, double p)```
* Binomial-Distribution - Acceptance Rejection/Inversion * * * Acceptance Rejection method combined with Inversion for * generating Binomial random numbers with parameters * n (number of trials) and p (probability of success).
`int` `nextInt()`
Returns a random number from the distribution.
`int` ```nextInt(int n, double p)```
Returns a random number from the distribution with the given parameters n and p; bypasses the internal state.
`double` `pdf(int k)`
Returns the probability distribution function.
`void` ```setNandP(int n, double p)```
Sets the parameters number of trials and the probability of success.
`java.lang.String` `toString()`
Returns a String representation of the receiver.
• ### Methods inherited from class sim.util.distribution.AbstractDiscreteDistribution

`nextDouble`
• ### Methods inherited from class sim.util.distribution.AbstractDistribution

`apply, apply, getRandomGenerator, setRandomGenerator`
• ### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`
• ### Field Detail

• #### n

`protected int n`
• #### p

`protected double p`
• ### Constructor Detail

• #### Binomial

```public Binomial(int n,
double p,
MersenneTwisterFast randomGenerator)```
Constructs a binomial distribution. Example: n=1, p=0.5.
Parameters:
`n` - the number of trials (also known as sample size).
`p` - the probability of success.
`randomGenerator` - a uniform random number generator.
Throws:
`java.lang.IllegalArgumentException` - if n*Math.min(p,1-p) <= 0.0
• ### Method Detail

• #### cdf

`public double cdf(int k)`
Returns the cumulative distribution function.
• #### generateBinomial

```protected int generateBinomial(int n,
double p)```
* Binomial-Distribution - Acceptance Rejection/Inversion * * * Acceptance Rejection method combined with Inversion for * generating Binomial random numbers with parameters * n (number of trials) and p (probability of success). * For min(n*p,n*(1-p)) < 10 the Inversion method is applied: * The random numbers are generated via sequential search, * starting at the lowest index k=0. The cumulative probabilities * are avoided by using the technique of chop-down. * For min(n*p,n*(1-p)) >= 10 Acceptance Rejection is used: * The algorithm is based on a hat-function which is uniform in * the centre region and exponential in the tails. * A triangular immediate acceptance region in the centre speeds * up the generation of binomial variates. * If candidate k is near the mode, f(k) is computed recursively * starting at the mode m. * The acceptance test by Stirling's formula is modified * according to W. Hoermann (1992): The generation of binomial * random variates, to appear in J. Statist. Comput. Simul. * If p < .5 the algorithm is applied to parameters n, p. * Otherwise p is replaced by 1-p, and k is replaced by n - k. * * * FUNCTION: - samples a random number from the binomial * distribution with parameters n and p and is * valid for n*min(p,1-p) > 0. * REFERENCE: - V. Kachitvichyanukul, B.W. Schmeiser (1988): * Binomial random variate generation, * Communications of the ACM 31, 216-222. * SUBPROGRAMS: - StirlingCorrection() * ... Correction term of the Stirling * approximation for log(k!) * (series in 1/k or table values * for small k) with long int k * - randomGenerator ... (0,1)-Uniform engine * *
• #### nextInt

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

```public int nextInt(int n,
double p)```
Returns a random number from the distribution with the given parameters n and p; bypasses the internal state.
Parameters:
`n` - the number of trials
`p` - the probability of success.
Throws:
`java.lang.IllegalArgumentException` - if n*Math.min(p,1-p) <= 0.0
• #### pdf

`public double pdf(int k)`
Returns the probability distribution function.
• #### setNandP

```public void setNandP(int n,
double p)```
Sets the parameters number of trials and the probability of success.
Parameters:
`n` - the number of trials
`p` - the probability of success.
Throws:
`java.lang.IllegalArgumentException` - if n*Math.min(p,1-p) <= 0.0
• #### toString

`public java.lang.String toString()`
Returns a String representation of the receiver.
Overrides:
`toString` in class `java.lang.Object`