PCG-32: A Seedable 32-bit PRNG
A WebAssembly port of the PCG Random Number Generator, Minimal C Edition.
Usage
import * as pcg from '@alisey/pcg32';
pcg.setState(0x0123456789ABCDEFn);
console.log(pcg.randomInt(10));
console.log(pcg.random());
API
randomInt(bound: number): number
Returns a uniformly distributed 32-bit unsigned random integer in the range
[0, bound), where bound
is a number from 1 to 2³².
random(): number
Returns a uniformly distributed floating point number in the range [0, 1) that
has been rounded down to the nearest multiple of 2⁻⁵³.
setState(state: bigint): void
Updates the internal state of the generator. The generator has 2⁶⁴ possible
internal states, and iterates through all of them. state
is a 64-bit unsigned
BigInt.
getState(): bigint
Returns a 64-bit unsigned BigInt representing the internal state of the
generator.
seed(value?: bigint): void
Seeds the generator with a 64-bit BigInt. If the value is not provided, uses
a value based on Math.random()
.
Performance
As of 2021, in V8 pcg.randomInt()
is as fast as
Math.floor(Math.random() * n)
, but doesn't introduce bias. pcg.random()
is
2 times slower than Math.random()
.
In SpiderMonkey and JavaScriptCore both functions are 10 times slower than
native equivalents.
Working With This Repo
npm install
npm run build
npm run test
npm run demo
npm run perf
Links