# Gaussian

Generates normally distributed random numbers.

## Syntax

Fortran:

status = vsrnggaussian( method, stream, n, r, a, sigma )

status = vdrnggaussian( method, stream, n, r, a, sigma )

C:

status = vsRngGaussian( method, stream, n, r, a, sigma );

status = vdRngGaussian( method, stream, n, r, a, sigma );

## Description

This function generates random numbers with normal (Gaussian) distribution with mean value a and standard deviation σ, where
`a, σ∈R ; σ > 0.`

The probability density function is given by:

The cumulative distribution function is as follows:

The cumulative distribution function `Fa,σ(x)` can be expressed in terms of standard normal distribution `Φ(x)` as

Fa,σ(x) = Φ((x - a)/σ)

## Input Parameters

Name | Type | Description
--- | --- | ---
method | FORTRAN: INTEGER, INTENT(IN) C: int | Generation method. The specific values are as follows: `VSL_METHOD_SGAUSSIAN_BOXMULLER` `VSL_METHOD_SGAUSSIAN_BOXMULLER2` `VSL_METHOD_SGAUSSIAN_ICDF` `VSL_METHOD_DGAUSSIAN_BOXMULLER` `VSL_METHOD_DGAUSSIAN_BOXMULLER2` `VSL_METHOD_DGAUSSIAN_ICDF` See brief description of the methods BOXMULLER, BOXMULLER2, and ICDF 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
a | FORTRAN: REAL, INTENT(IN) for vsrnggaussian DOUBLE PRECISION, INTENT(IN) for vdrnggaussian C: float for vsRngGaussian double for vdRngGaussian | Mean value a.
sigma | FORTRAN: REAL, INTENT(IN) for vsrnggaussian DOUBLE PRECISION, INTENT(IN) for vdrnggaussian C: float for vsRngGaussian double for vdRngGaussian | Standard deviation σ.

## Output Parameters

Name | Type | Description
--- | --- | ---
r | FORTRAN: REAL, INTENT(OUT) for vsrnggaussian DOUBLE PRECISION, INTENT(OUT) for vdrnggaussian C: float* for vsRngGaussian double* for vdRngGaussian | Vector of n normally distributed random numbers

## 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: Continuous Distributions