# Pseudorandom Number Generators > Standard library base pseudorandom number generators (PRNGs).
## 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 ```
## Examples ```javascript var objectKeys = require( '@stdlib/utils/keys' ); var random = require( '@stdlib/random/base' ); console.log( objectKeys( random ) ); ```