# Hypergeometric

Generates hypergeometrically distributed random values.

## Syntax

Fortran:

status = virnghypergeometric( method, stream, n, r, l, s, m )

C:

status = viRngHypergeometric( method, stream, n, r, l, s, m );

## Description

This function generates hypergeometrically distributed random values with lot size l, size of sampling s, and number of marked elements in the lot m, where `l, m, s∈N∪{0}; l ≥ max(s, m)`.

Consider a lot of l elements comprising m “marked” and l-m “unmarked“ elements. A trial sampling without replacement of exactly s elements from this lot helps to define the hypergeometric distribution, which is the probability that the group of s elements contains exactly k marked elements.

The probability distribution is given by:)

, k∈ {max(0, s + m - l), ..., min(s, m)}

The cumulative distribution function is as follows:

## Input Parameters

Name | Type | Description
--- | --- | ---
method | FORTRAN: INTEGER, INTENT(IN) C: int | Generation method. The specific value is as follows: `VSL_METHOD_IHYPERGEOMETRIC_H2PE` See brief description of the H2PE method in Table“Values of `<method>` in method parameter”
stream | FORTRAN: TYPE (VSL_STREAM_STATE), INTENT(IN) C: VSLStreamStatePtr | FORTRAN: Descriptor of the stream state structure. C: Pointer to the stream state structure
n | FORTRAN: INTEGER, INTENT(IN) C: int | Number of random values to be generated
l | FORTRAN: INTEGER, INTENT(IN) C: int | Lot size l
s | FORTRAN: INTEGER, INTENT(IN) C: int | Size of sampling without replacement s
m | FORTRAN: INTEGER, INTENT(IN) C: int | Number of marked elements m

## Output Parameters

Name | Type | Description
--- | --- | ---
r | FORTRAN: INTEGER, INTENT(OUT) C: int* | Vector of n hypergeometrically distributed random values

## Return Values

VSL_ERROR_OK, VSL_STATUS_OK
  Indicates no error, execution is successful.
VSL_ERROR_NULL_PTR
  stream is a NULL pointer.
VSL_ERROR_BAD_STREAM

  stream is not a valid random stream.

VSL_ERROR_BAD_UPDATE

  Callback function for an abstract BRNG returns an invalid number of updated entries in a buffer, that is, `< 0` or `> nmax`.

VSL_ERROR_NO_NUMBERS

  Callback function for an abstract BRNG returns 0 as the number of updated entries in a buffer.

Parent topic: Discrete Distributions