GSL-RNG

This module introduce the class <gsl-rng> that provides a uniform interface to a large collection of random number generators.

To create a random number generator with the BSD $gsl-rng-rand generator and a seed:

let rng = make(<gsl-rng>, type: $gsl-rng-rand, seed: 1234);
format-out("generator type: %s\n", rng.gsl-rng-name);
format-out("seed = %d\n", rng.gsl-rng-seed);
format-out("first value = %d\n", rng.gsl-rng-get);

Random number environment variables

gsl-rng-env-setup Function

This function reads the environment variables GSL_RNG_TYPE and GSL_RNG_SEED and uses their values to set the corresponding library variables gsl_rng_default and gsl_rng_default_seed.

If you don’t specify a generator for GSL_RNG_TYPE then $gsl-rng-mt19937 is used as the default. The initial value of gsl-rng-default-seed is zero.

Signature:

gsl-rng-env-setup () => ()

See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_env_setup

Example:

Here we create a default random number generator with default seed:

gsl-rng-env-setup();

let rng = make(<gsl-rng>);

format-out("generator type: %s\n", rng.gsl-rng-name);
format-out("seed = %d\n", rng.gsl-rng-seed);
format-out("first value = %d\n", rng.gsl-rng-get);
Example:

Running the program without any environment variables,

$ test-rng.exe
generator type: mt19937
seed = 0
first value = 4293858116
Example:

We can pass the environment variables to choose type of algorithm and seed:

$ GSL_RNG_TYPE="taus" GSL_RNG_SEED=123 test-rng.exe
GSL_RNG_TYPE=taus
GSL_RNG_SEED=123
generator type: taus
seed = 123
first value = 2720986350

Random generator base class

<gsl-rng> Class

The class for random number generators.

Superclasses:

<object>

Init-Keywords:

Sampling

gsl-rng-get Function

Returns a random number between the minimum and maximum value of the random number generator.

Signature:

gsl-rng-get (rng) => (number)

Parameters:
Values number:

A random number between the minimum and maximum value of the random number generator as an instance of <integer>.

Example:
let r = make(<gsl-rng>);
let s = r.gsl-rng-get;
gsl-rng-uniform Function

Returns a random floating point number uniformly distributed in the range [0,1).

Signature:

gsl-rng-uniform (rng) => (number)

Parameters:
Values number:

An instance of <float>. The range includes 0.0 but excludes 1.0.

Example:
let r = make(<gsl-rng>);
let s = r.gsl-rng-uniform;
gsl-rng-uniform-positive Function

Returns a positive random number uniformly distributed in the range (0,1), excluding both 0.0 and 1.0. The number is obtained by sampling the generator with the algorithm of gsl-rng-uniform until a non-zero value is obtained.

Signature:

gsl-rng-uniform-positive (rng) => (number)

Parameters:
Values number:

An instance of <float>, between 0.0 and 1.0 excluding both endpoints.

Example:
let r = make(<gsl-rng>);
let s = r.gsl-rng-uniform-positive;
gsl-rng-uniform-integer Function

Returns a random number between 0 and n-1 of the random number generator.

Signature:

gsl-rng-uniform-integer (rng, n) => (number)

Parameters:
  • rng – An instance of <gsl-rng>.

  • n – An instance of <integer>. The parameter must be less than or equal to the range or the generator rng. If n is larger than the range of the generator an error will be signaled.

Values number:

A random number between 0 and n-1 of the random number generator as an instance of <integer>.

Example:
let r = make(<gsl-rng>);
let s = gsl-rng-uniform-integer(r, 10);

Auxiliary functions

gsl-rng-name Function

Returns the name of the random number generator.

Signature:

gsl-rng-name (rng) => (name)

Parameters:
Values name:

The name of the random number generator as an instance of <string>.

Example:
let r = make(<gsl-rng>, type: $gsl-rng-rand);
format-out("%s", r.gsl-rng-name);
// rand
gsl-rng-seed(<gsl-rng>) Method

Returns the seed of the random number generator

Signature:

gsl-rng-seed (rng) => (seed)

Parameters:
Values seed:

An instance of <integer>

Example:
let r = make(<gsl-rng>, seed: 1234);
format-out("Seed: %d\n", r.gsl-rng-seed);
// Seed: 1234
gsl-rng-min Function

Returns the smallest value returned by the random number generator.

Signature:

gsl-rng-min (rng) => (min)

Parameters:
Values min:

The minimum value returned by the random number generator as an instance of <integer>.

gsl-rng-max Function

Returns the maximum value returned by the random number generator.

Signature:

gsl-rng-max (rng) => (max)

Parameters:
Values max:

The maximum value returned by the random number generator as an instance of <integer>.

Random number generator algorithms

Below are all the algorithms of random number generators available, whose constants can be passed in the class <gsl-rng> construction with the type: keyword.

MT19937 generators

$mt19937 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_mt19937

$mt19937-1999 Constant
$mt19937-1998 Constant

RANLUX generators

$ranlxs0 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_ranlxs0

$ranlxs1 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_ranlxs1

$ranlxs2 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_ranlxs2

$ranlxd1 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_ranlxd1

$ranlxd2 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_ranlxd2

$ranlux Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_ranlux

$ranlux389 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_ranlux389

L’Ecuyer generators

$cmrg Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_cmrg

$mrg Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_mrg

$taus Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_taus

$taus2 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_taus2005

$taus113 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_tt800

GSFR4

$gfsr4 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_gfsr4

Unix random number generators

BSD generators

$rand Constant
$random-bsd Constant
$random-glibc2 Constant
$random-libc5 Constant
$random8-bsd Constant
$random8-glibc2 Constant
$random8-libc5 Constant
$random32-bsd Constant
$random32-glibc2 Constant
$random32-libc5 Constant
$random64-bsd Constant
$random64-glibc2 Constant
$random64-libc5 Constant
$random128-bsd Constant
$random128-glibc2 Constant
$random128-libc5 Constant
$random256-bsd Constant
$random256-glibc2 Constant
$random256-libc5 Constant
$rand48 Constant
$ran0 Constant
$ran1 Constant
$ran2 Constant
$ran3 Constant

Other random number generators

$ranf Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_ranf

$ranmar Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_ransi

$r250 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_r250

$tt800 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_tt800

$vax Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_vax

$transputer Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_vdup

$randu Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_randu

$minstd Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_minstd

$uni Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_uni

$uni32 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_uni32

$slatec Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_slatec

$zuf Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_zuf

$knuthran2 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_knuthran2

$knuthran2002 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_knuthran2002

$knuthran Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_knuthran

$borosh13 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_borosh13

$fishman18 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_fishman18

$fishman20 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_fishman20

$lecuyer21 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_lecuyer21

$waterman14 Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_waterman14

$fishman2x Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_fishman2x

$coveyou Constant
See also:

https://www.gnu.org/software/gsl/doc/html/rng.html#c.gsl_rng_coveyou