whrandom / random.js
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.
Mersenne Twister / mersenne.js
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.
Using it
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)