## Usage
```javascript
var random = require( '@stdlib/random/base' );
```
#### random
Standard library base pseudorandom number generators (PRNGs).
```javascript
var ns = random;
// returns {...}
```
The namespace contains the following PRNGs:
- [`arcsine( a, b )`][@stdlib/random/base/arcsine]: arcsine distributed pseudorandom numbers.
- [`bernoulli( p )`][@stdlib/random/base/bernoulli]: Bernoulli distributed pseudorandom numbers.
- [`beta( alpha, beta )`][@stdlib/random/base/beta]: beta distributed pseudorandom numbers.
- [`betaprime( alpha, beta )`][@stdlib/random/base/betaprime]: beta prime distributed pseudorandom numbers.
- [`binomial( n, p )`][@stdlib/random/base/binomial]: binomial distributed pseudorandom numbers.
- [`boxMuller()`][@stdlib/random/base/box-muller]: standard normally distributed pseudorandom numbers using the Box-Muller transform.
- [`cauchy( x0, gamma )`][@stdlib/random/base/cauchy]: Cauchy distributed pseudorandom numbers.
- [`chi( k )`][@stdlib/random/base/chi]: Chi distributed pseudorandom numbers.
- [`chisquare( k )`][@stdlib/random/base/chisquare]: Chi-square distributed pseudorandom numbers.
- [`cosine( mu, s )`][@stdlib/random/base/cosine]: raised cosine distributed pseudorandom numbers.
- [`discreteUniform( a, b )`][@stdlib/random/base/discrete-uniform]: discrete uniform distributed pseudorandom numbers.
- [`erlang( k, lambda )`][@stdlib/random/base/erlang]: Erlang distributed pseudorandom numbers.
- [`exponential( lambda )`][@stdlib/random/base/exponential]: exponentially distributed pseudorandom numbers.
- [`f( d1, d2 )`][@stdlib/random/base/f]: F distributed pseudorandom numbers.
- [`frechet( alpha, s, m )`][@stdlib/random/base/frechet]: Fréchet distributed pseudorandom numbers.
- [`gamma( alpha, beta )`][@stdlib/random/base/gamma]: gamma distributed pseudorandom numbers.
- [`geometric( p )`][@stdlib/random/base/geometric]: geometric distributed pseudorandom numbers.
- [`gumbel( mu, beta )`][@stdlib/random/base/gumbel]: Gumbel distributed pseudorandom numbers.
- [`hypergeometric( N, K, n )`][@stdlib/random/base/hypergeometric]: hypergeometric distributed pseudorandom numbers.
- [`improvedZiggurat()`][@stdlib/random/base/improved-ziggurat]: standard normally distributed pseudorandom numbers using the Improved Ziggurat method.
- [`invgamma( alpha, beta )`][@stdlib/random/base/invgamma]: inverse gamma distributed pseudorandom numbers.
- [`kumaraswamy( a, b )`][@stdlib/random/base/kumaraswamy]: Kumaraswamy's double bounded distributed pseudorandom numbers.
- [`laplace( mu, b )`][@stdlib/random/base/laplace]: Laplace (double exponential) distributed pseudorandom numbers.
- [`levy( mu, c )`][@stdlib/random/base/levy]: Lévy distributed pseudorandom numbers.
- [`logistic( mu, s )`][@stdlib/random/base/logistic]: logistic distributed pseudorandom numbers.
- [`lognormal( mu, sigma )`][@stdlib/random/base/lognormal]: lognormal distributed pseudorandom numbers.
- [`minstdShuffle()`][@stdlib/random/base/minstd-shuffle]: A linear congruential pseudorandom number generator (LCG) whose output is shuffled.
- [`minstd()`][@stdlib/random/base/minstd]: A linear congruential pseudorandom number generator (LCG) based on Park and Miller.
- [`mt19937()`][@stdlib/random/base/mt19937]: A 32-bit Mersenne Twister pseudorandom number generator.
- [`negativeBinomial( r, p )`][@stdlib/random/base/negative-binomial]: negative binomially distributed pseudorandom numbers.
- [`normal( mu, sigma )`][@stdlib/random/base/normal]: normally distributed pseudorandom numbers.
- [`pareto1( alpha, beta )`][@stdlib/random/base/pareto-type1]: Pareto (Type I) distributed pseudorandom numbers.
- [`poisson( lambda )`][@stdlib/random/base/poisson]: Poisson distributed pseudorandom numbers.
- [`randi()`][@stdlib/random/base/randi]: pseudorandom numbers having integer values.
- [`randn()`][@stdlib/random/base/randn]: standard normally distributed pseudorandom numbers.
- [`randu()`][@stdlib/random/base/randu]: uniformly distributed pseudorandom numbers between 0 and 1.
- [`rayleigh( sigma )`][@stdlib/random/base/rayleigh]: Rayleigh distributed pseudorandom numbers.
- [`reviveBasePRNG( key, value )`][@stdlib/random/base/reviver]: revive a JSON-serialized pseudorandom number generator (PRNG).
- [`t( v )`][@stdlib/random/base/t]: Student's t-distributed pseudorandom numbers.
- [`triangular( a, b, c )`][@stdlib/random/base/triangular]: triangular distributed pseudorandom numbers.
- [`uniform( a, b )`][@stdlib/random/base/uniform]: uniformly distributed pseudorandom numbers.
- [`weibull( k, lambda )`][@stdlib/random/base/weibull]: 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.
```javascript
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,
```javascript
// 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
// Create a PRNG with fixed parameters:
rand = random.normal.factory( 1.0, 2.0, {
'seed': 12345
});
r = rand();
// returns
```