JSFiddle - React, Tailwind, and code Playground
by blesh
JavaScript
/**
* MarsenneTwister
* (c) 2013 Ben Lesh
* http://www.benlesh.com
* MIT License
*/
function MersenneTwister(seed) {
'use strict';
var mt = [seed],
mtLen = 624,
last32 = 18122433253 & 0xFFFFFFFF,
index = 0;
for (var i = 1; i < mtLen; i++) {
mt[i] = last32 * (mt[i - 1] ^ (mt[i - 1] >> 30)) + 1;
}
this.next = function () {
if (index === 0) {
generate();
}
var y = mt[index];
y ^= (y >> 11);
y ^= (y << 7) & 0x9d2c5680;
y ^= (y << 15) & 0xefc60000;
y ^= y >> 18;
index = (index + 1) % mtLen;
return y;
};
function generate() {
var i, y;
for (i = 0; i < mtLen; i++) {
y = (mt[i] & 0x80000000) + (mt[(i + 1) % mtLen] & 0x7fffffff);
mt[i] = mt[(i + 397) % mtLen] ^ (y >> 1);
if (y % 2 !== 0) {
mt[i] = mt[i] ^ 0x9908b0df;
}
}
}
}
//testing.
var gen = new MersenneTwister(100);
console.log(gen.next());