15 KiB
15 KiB
Pseudorandom Number Generators
Standard library base pseudorandom number generators (PRNGs).
Usage
var random = require( '@stdlib/random/base' );
random
Standard library base pseudorandom number generators (PRNGs).
var ns = random;
// returns {...}
The namespace contains the following PRNGs:
arcsine( a, b )
: arcsine distributed pseudorandom numbers.bernoulli( p )
: Bernoulli distributed pseudorandom numbers.beta( alpha, beta )
: beta distributed pseudorandom numbers.betaprime( alpha, beta )
: beta prime distributed pseudorandom numbers.binomial( n, p )
: binomial distributed pseudorandom numbers.boxMuller()
: standard normally distributed pseudorandom numbers using the Box-Muller transform.cauchy( x0, gamma )
: Cauchy distributed pseudorandom numbers.chi( k )
: Chi distributed pseudorandom numbers.chisquare( k )
: Chi-square distributed pseudorandom numbers.cosine( mu, s )
: raised cosine distributed pseudorandom numbers.discreteUniform( a, b )
: discrete uniform distributed pseudorandom numbers.erlang( k, lambda )
: Erlang distributed pseudorandom numbers.exponential( lambda )
: exponentially distributed pseudorandom numbers.f( d1, d2 )
: F distributed pseudorandom numbers.frechet( alpha, s, m )
: Fréchet distributed pseudorandom numbers.gamma( alpha, beta )
: gamma distributed pseudorandom numbers.geometric( p )
: geometric distributed pseudorandom numbers.gumbel( mu, beta )
: Gumbel distributed pseudorandom numbers.hypergeometric( N, K, n )
: hypergeometric distributed pseudorandom numbers.improvedZiggurat()
: standard normally distributed pseudorandom numbers using the Improved Ziggurat method.invgamma( alpha, beta )
: inverse gamma distributed pseudorandom numbers.kumaraswamy( a, b )
: Kumaraswamy's double bounded distributed pseudorandom numbers.laplace( mu, b )
: Laplace (double exponential) distributed pseudorandom numbers.levy( mu, c )
: Lévy distributed pseudorandom numbers.logistic( mu, s )
: logistic distributed pseudorandom numbers.lognormal( mu, sigma )
: lognormal distributed pseudorandom numbers.minstdShuffle()
: A linear congruential pseudorandom number generator (LCG) whose output is shuffled.minstd()
: A linear congruential pseudorandom number generator (LCG) based on Park and Miller.mt19937()
: A 32-bit Mersenne Twister pseudorandom number generator.negativeBinomial( r, p )
: negative binomially distributed pseudorandom numbers.normal( mu, sigma )
: normally distributed pseudorandom numbers.pareto1( alpha, beta )
: Pareto (Type I) distributed pseudorandom numbers.poisson( lambda )
: Poisson distributed pseudorandom numbers.randi()
: pseudorandom numbers having integer values.randn()
: standard normally distributed pseudorandom numbers.randu()
: uniformly distributed pseudorandom numbers between 0 and 1.rayleigh( sigma )
: Rayleigh distributed pseudorandom numbers.reviveBasePRNG( key, value )
: revive a JSON-serialized pseudorandom number generator (PRNG).t( v )
: Student's t-distributed pseudorandom numbers.triangular( a, b, c )
: triangular distributed pseudorandom numbers.uniform( a, b )
: uniformly distributed pseudorandom numbers.weibull( k, lambda )
: Weibull distributed pseudorandom numbers.
Attached to each PRNG are the following properties:
- NAME: the generator name.
- seed: the value used to seed the PRNG.
- seedLength: the length of the PRNG seed.
- state: the PRNG state.
- stateLength: the length of the PRNG state.
- byteLength: the size of the PRNG state.
- PRNG: the underlying pseudorandom number generator.
Additionally, attached to each PRNG is a .factory()
method which supports creating a seeded PRNG and thus generating a reproducible sequence of pseudorandom numbers.
var rand;
var v;
var i;
// Generate pseudorandom values...
for ( i = 0; i < 100; i++ ) {
v = random.randu();
}
// Generate the same pseudorandom values...
rand = random.randu.factory({
'seed': random.randu.seed
});
for ( i = 0; i < 100; i++ ) {
v = rand();
}
For parameterized PRNGs, the .factory()
method supports specifying parameters upon either PRNG creation or invocation. For example,
// Create a PRNG which requires providing parameters at each invocation:
var rand = random.normal.factory({
'seed': 12345
});
var r = rand( 1.0, 2.0 );
// returns <number>
// Create a PRNG with fixed parameters:
rand = random.normal.factory( 1.0, 2.0, {
'seed': 12345
});
r = rand();
// returns <number>
Examples
var objectKeys = require( '@stdlib/utils/keys' );
var random = require( '@stdlib/random/base' );
console.log( objectKeys( random ) );