g05tj generates a vector of pseudorandom integers from the discrete Poisson distribution with mean $\lambda$.

# Syntax

C#
```public static void g05tj(
int mode,
int n,
double lambda,
double[] r,
G05..::..G05State g05state,
int[] x,
out int ifail
)```
Visual Basic
```Public Shared Sub g05tj ( _
mode As Integer, _
n As Integer, _
lambda As Double, _
r As Double(), _
g05state As G05..::..G05State, _
x As Integer(), _
<OutAttribute> ByRef ifail As Integer _
)```
Visual C++
```public:
static void g05tj(
int mode,
int n,
double lambda,
array<double>^ r,
G05..::..G05State^ g05state,
array<int>^ x,
[OutAttribute] int% ifail
)```
F#
```static member g05tj :
mode : int *
n : int *
lambda : float *
r : float[] *
g05state : G05..::..G05State *
x : int[] *
ifail : int byref -> unit
```

#### Parameters

mode
Type: System..::..Int32
On entry: a code for selecting the operation to be performed by the method.
${\mathbf{mode}}=0$
Set up reference vector only.
${\mathbf{mode}}=1$
Generate variates using reference vector set up in a prior call to g05tj.
${\mathbf{mode}}=2$
Set up reference vector and generate variates.
${\mathbf{mode}}=3$
Generate variates without using the reference vector.
Constraint: ${\mathbf{mode}}=0$, $1$, $2$ or $3$.
n
Type: System..::..Int32
On entry: $n$, the number of pseudorandom numbers to be generated.
Constraint: ${\mathbf{n}}\ge 0$.
lambda
Type: System..::..Double
On entry: $\lambda$, the mean of the Poisson distribution.
Constraint: ${\mathbf{lambda}}\ge 0.0$.
r
Type: array<System..::..Double>[]()[][]
An array of size [lr]
On entry: if ${\mathbf{mode}}=1$, the reference vector from the previous call to g05tj.
If ${\mathbf{mode}}=3$, r is not referenced.
On exit: if ${\mathbf{mode}}\ne 3$, the reference vector.
g05state
Type: NagLibrary..::..G05..::..G05State
An Object of type G05.G05State.
x
Type: array<System..::..Int32>[]()[][]
An array of size [n]
On exit: the $n$ pseudorandom numbers from the specified Poisson distribution.
ifail
Type: System..::..Int32%
On exit: ${\mathbf{ifail}}={0}$ unless the method detects an error or a warning has been flagged (see [Error Indicators and Warnings]).

# Description

g05tj generates $n$ integers ${x}_{i}$ from a discrete Poisson distribution with mean $\lambda$, where the probability of ${x}_{i}=I$ is
 $Pxi=I=λI×e-λI!, I=0,1,…,$
where $\lambda \ge 0$.
The variates can be generated with or without using a search table and index. If a search table is used then it is stored with the index in a reference vector and subsequent calls to g05tj with the same parameter values can then use this reference vector to generate further variates. The reference array is found using a recurrence relation if $\lambda$ is less than $50$ and by Stirling's formula otherwise.
One of the initialization methods (G05KFF not in this release) (for a repeatable sequence if computed sequentially) or (G05KGF not in this release) (for a non-repeatable sequence) must be called prior to the first call to g05tj.

# References

Kendall M G and Stuart A (1969) The Advanced Theory of Statistics (Volume 1) (3rd Edition) Griffin
Knuth D E (1981) The Art of Computer Programming (Volume 2) (2nd Edition) Addison–Wesley

# Error Indicators and Warnings

Errors or warnings detected by the method:
${\mathbf{ifail}}=1$
On entry, ${\mathbf{mode}}\ne 0$, $1$, $2$ or $3$.
${\mathbf{ifail}}=2$
On entry, ${\mathbf{n}}<0$.
${\mathbf{ifail}}=3$
On entry, ${\mathbf{lambda}}<0.0$.
${\mathbf{mode}}=0$ or $2$ and lambda is such that lr would have to be larger than the largest representable integer. Use ${\mathbf{mode}}=3$ in this case.
${\mathbf{ifail}}=4$
On entry, lambda is not the same as when r was set up in a previous call to g05tj with ${\mathbf{mode}}=0$ or $2$.
On entry, the r vector was not initialized correctly, or has been corrupted.
${\mathbf{ifail}}=5$
On entry, lr is too small when ${\mathbf{mode}}=0$ or $2$.
${\mathbf{ifail}}=6$
 On entry, state vector was not initialized or has been corrupted.
${\mathbf{ifail}}=-9000$
An error occured, see message report.
${\mathbf{ifail}}=-8000$
Negative dimension for array $〈\mathit{\text{value}}〉$
${\mathbf{ifail}}=-6000$
Invalid Parameters $〈\mathit{\text{value}}〉$

Not applicable.

None.