UNPKG

park-miller

Version:

Park-Miller pseudorandom number generator (PRNG)

41 lines (31 loc) 731 B
const MAX_INT32 = 2147483647; const MINSTD = 16807; // TODO: Use private class fields when ESLint supports it. export default class ParkMiller { constructor(seed) { if (!Number.isInteger(seed)) { throw new TypeError('Expected `seed` to be a `integer`'); } this._seed = seed % MAX_INT32; if (this._seed <= 0) { this._seed += (MAX_INT32 - 1); } } integer() { this._seed *= MINSTD; this._seed %= MAX_INT32; return this._seed; } integerInRange(min, max) { return Math.round(this.floatInRange(min, max)); } float() { return (this.integer() - 1) / (MAX_INT32 - 1); } floatInRange(min, max) { return min + ((max - min) * this.float()); } boolean() { return this.integer() % 2 === 0; } }