UNPKG

603 BJavaScriptView Raw
1/**
2 * @module prng
3 */
4
5import * as binary from '../binary.js'
6
7/**
8 * Xorshift32 is a very simple but elegang PRNG with a period of `2^32-1`.
9 */
10export class Xorshift32 {
11 /**
12 * @param {number} seed Unsigned 32 bit number
13 */
14 constructor (seed) {
15 this.seed = seed
16 /**
17 * @type {number}
18 */
19 this._state = seed
20 }
21
22 /**
23 * Generate a random signed integer.
24 *
25 * @return {Number} A 32 bit signed integer.
26 */
27 next () {
28 let x = this._state
29 x ^= x << 13
30 x ^= x >> 17
31 x ^= x << 5
32 this._state = x
33 return (x >>> 0) / (binary.BITS32 + 1)
34 }
35}