Aktueller Stand
This commit is contained in:
47
backend/node_modules/pure-rand/lib/esm/generator/LinearCongruential.js
generated
vendored
Normal file
47
backend/node_modules/pure-rand/lib/esm/generator/LinearCongruential.js
generated
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
var MULTIPLIER = 0x000343fd;
|
||||
var INCREMENT = 0x00269ec3;
|
||||
var MASK = 0xffffffff;
|
||||
var MASK_2 = (1 << 31) - 1;
|
||||
var computeNextSeed = function (seed) {
|
||||
return (seed * MULTIPLIER + INCREMENT) & MASK;
|
||||
};
|
||||
var computeValueFromNextSeed = function (nextseed) {
|
||||
return (nextseed & MASK_2) >> 16;
|
||||
};
|
||||
var LinearCongruential32 = (function () {
|
||||
function LinearCongruential32(seed) {
|
||||
this.seed = seed;
|
||||
}
|
||||
LinearCongruential32.prototype.clone = function () {
|
||||
return new LinearCongruential32(this.seed);
|
||||
};
|
||||
LinearCongruential32.prototype.next = function () {
|
||||
var nextRng = new LinearCongruential32(this.seed);
|
||||
var out = nextRng.unsafeNext();
|
||||
return [out, nextRng];
|
||||
};
|
||||
LinearCongruential32.prototype.unsafeNext = function () {
|
||||
var s1 = computeNextSeed(this.seed);
|
||||
var v1 = computeValueFromNextSeed(s1);
|
||||
var s2 = computeNextSeed(s1);
|
||||
var v2 = computeValueFromNextSeed(s2);
|
||||
this.seed = computeNextSeed(s2);
|
||||
var v3 = computeValueFromNextSeed(this.seed);
|
||||
var vnext = v3 + ((v2 + (v1 << 15)) << 15);
|
||||
return vnext | 0;
|
||||
};
|
||||
LinearCongruential32.prototype.getState = function () {
|
||||
return [this.seed];
|
||||
};
|
||||
return LinearCongruential32;
|
||||
}());
|
||||
function fromState(state) {
|
||||
var valid = state.length === 1;
|
||||
if (!valid) {
|
||||
throw new Error('The state must have been produced by a congruential32 RandomGenerator');
|
||||
}
|
||||
return new LinearCongruential32(state[0]);
|
||||
}
|
||||
export var congruential32 = Object.assign(function (seed) {
|
||||
return new LinearCongruential32(seed);
|
||||
}, { fromState: fromState });
|
||||
Reference in New Issue
Block a user