A functional implementation of the PCG family random number generators, written in JavaScript.
To achieve frictionless reproducibility of random output results, immutable objects are used throughout the project.
First, seed a PCG state. A stream ID specifies which unique periodic series of entropy to use. The state specifies where in that series we start.
import { createPcg32 } from 'pcg'
const advancedOptions = {}
const initState = 42
const initStreamId = 54
const state0 = createPcg32(advancedOptions, initState, initStreamId)
After that, random outputs can be generated by calling appropriate functions as shown below:
import { nextState, prevState, randomInt, randomList } from 'pcg'
const randomUint32 = randomInt(0, 2 ** 32 - 1)
const [value, nextState] = randomUint32(state0)
const listLength = 3
const listItemRng = randomUint32
const [[v1, state1], [v2, state2], [v3, state3]] = randomList(listLength, listItemRng, state0)
In this above example, value === v1
, and nextState === state1