@thi.ng/random
Version:
Pseudo-random number generators w/ unified API, distributions, weighted choices, ID generation
33 lines (32 loc) • 692 B
JavaScript
import { ARandom } from "./arandom.js";
import { DEFAULT_SEED_128 } from "./constants.js";
class SFC32 extends ARandom {
buffer;
constructor(seed = DEFAULT_SEED_128) {
super();
this.buffer = new Uint32Array(4);
this.seed(seed);
}
copy() {
return new SFC32(this.buffer);
}
bytes() {
return new Uint8Array(this.buffer.buffer);
}
int() {
const s = this.buffer;
const t = (s[0] + s[1] >>> 0) + s[3] >>> 0;
s[3] = s[3] + 1 >>> 0;
s[0] = s[1] ^ s[1] >>> 9;
s[1] = s[2] + (s[2] << 3) >>> 0;
s[2] = (s[2] << 21 | s[2] >>> 11) + t >>> 0;
return t;
}
seed(seed) {
this.buffer.set(seed);
return this;
}
}
export {
SFC32
};