vending-machine/mobile/node_modules/pure-rand/lib/generator/congruential32.js
2026-04-03 06:07:13 +08:00

47 lines
1.4 KiB
JavaScript

Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
//#region src/generator/congruential32.ts
const MULTIPLIER = 214013;
const INCREMENT = 2531011;
const MASK = 4294967295;
const MASK_2 = -2147483649;
const JUMP_MULTIPLIER = 1994129409;
const JUMP_INCREMENT = 916127744;
var LinearCongruential32 = class LinearCongruential32 {
constructor(seed) {
this.seed = seed;
}
clone() {
return new LinearCongruential32(this.seed);
}
next() {
const s1 = computeNextSeed(this.seed);
const v1 = computeValueFromNextSeed(s1);
const s2 = computeNextSeed(s1);
const v2 = computeValueFromNextSeed(s2);
this.seed = computeNextSeed(s2);
return computeValueFromNextSeed(this.seed) + (v2 + (v1 << 15) << 15) | 0;
}
jump() {
this.seed = Math.imul(this.seed, JUMP_MULTIPLIER) + JUMP_INCREMENT & MASK;
}
getState() {
return [this.seed];
}
};
function computeNextSeed(seed) {
return Math.imul(seed, MULTIPLIER) + INCREMENT & MASK;
}
function computeValueFromNextSeed(nextseed) {
return (nextseed & MASK_2) >> 16;
}
function congruential32FromState(state) {
if (!(state.length === 1)) throw new Error("The state must have been produced by a congruential32 RandomGenerator");
return new LinearCongruential32(state[0]);
}
function congruential32(seed) {
return new LinearCongruential32(seed);
}
//#endregion
exports.congruential32 = congruential32;
exports.congruential32FromState = congruential32FromState;