This is a port of Python's whrandom module, which is a pseudorandom number generator.
That means it creates "random" numbers with a seed, and if you provide the same seed it will create the same set of numbers. This is a common feature in many languages, but not offered by Javascript's Math.random()
.
This isn't the best random number generator, but the algorithm is very simple.
Python now prefers the Marsenne Twister. It has some nice features over whrandom (you can read that page to see them).
I've taken a piece of code written by Y. Okada and library-ized it some. It matches the interface of whrandom.
If you include random.js
it will expose one variable: WHRandomStream
(mersenne.js
exposes MersenneRandomStream
). You can also require the module using requirejs or import it in Node (though I haven't provided a pacakge.json), and in both cases the exported object is RandomStream
itself (e.g., var RandomStream = require("./random.js");
, ditto mersenne.js
)
To create a stream, call RandomStream(seed)
; if no seed
is provided then Date.now()
is used. To get new random numbers from a stream, simply call the function. All random numbers are between 0 and 1 (but never actually 1), just like Math.random()
.
MersenneRandomStream
instances also have the methods:
.int31()
: generates a random number on [0,0x7fffffff]-interval
.real1()
: generates a random number on [0,1]-real-interval
.real2()
: generates a random number on [0,1)-real-interval (the default)
.real3()
: generates a random number on (0,1)-real-interval
.res53()
: generates a random number on [0,1) with 53-bit resolution (basically higher resolution version of the default)