-
-
Save avivbeeri/7b197209d8cbccadb9b5260fd2926a52 to your computer and use it in GitHub Desktop.
A very simple, seedable JavaScript PRNG.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Creates a pseudo-random value generator. The seed must be an integer. | |
* | |
* Uses an optimized version of the Park-Miller PRNG. | |
* http://www.firstpr.com.au/dsp/rand31/ | |
*/ | |
function Random(seed) { | |
this._seed = seed % 2147483647; | |
if (this._seed <= 0) this._seed += 2147483646; | |
} | |
/** | |
* Returns a pseudo-random value between 1 and 2^32 - 2. | |
*/ | |
Random.prototype.next = function () { | |
return this._seed = this._seed * 16807 % 2147483647; | |
}; | |
/** | |
* Returns a pseudo-random floating point number in range [0, 1). | |
*/ | |
Random.prototype.nextFloat = function (opt_minOrMax, opt_max) { | |
// We know that result of next() will be 1 to 2147483646 (inclusive). | |
return (this.next() - 1) / 2147483646; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment