@alisey/pcg32
v1.1.0
Published
PCG-32 random number generator implemented in WebAssembly
Downloads
8
Readme
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)); // ⇒ 5
console.log(pcg.random()); // ⇒ 0.3697000732146962
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