JSFiddle - React, Tailwind, and code Playground
by konijn_gmail_com
JavaScript
/*
var m = new MersenneTwister(seed);
var randomNumber = m.random();
Hijacked from https://gist.github.com/300494
*/
var MersenneTwister = function(seed) {
this.M = 397;
this.N = this.mti = 624;
this.mt = [(seed || new Date().getTime()) >>> 0];
console.log("Seed:", this.mt[0] );
for (var i=1; i<this.N; i++)
{
s = this.mt[i-1] ^ (this.mt[i-1] >>> 30);
this.mt[i] = ((((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253) + i) >>> 0;
}
}
/* generates a random number on [0,0xffffffff]-interval */
MersenneTwister.prototype.int32 = function() {
var LOWER_MASK = 0x7fffffff; // least significant r bits
var UPPER_MASK = 0x80000000; // most significant w-r bits
var y;
var mag01 = new Array(0, 0x9908b0df); // mag01[x] = x * MATRIX_A for x=0,1
if (this.mti >= this.N) { /* generate N words at one time */
var kk;
for (kk=0;kk<this.N-this.M;kk++) {
y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk+1] & LOWER_MASK);
this.mt[kk] = this.mt[kk+this.M] ^ (y >>> 1) ^ mag01[y & 1];
}
for (;kk<this.N-1;kk++) {
y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk+1] & LOWER_MASK);
this.mt[kk] = this.mt[kk+(this.M-this.N)] ^ (y >>> 1) ^ mag01[y & 1];
}
y = (this.mt[this.N-1]&this.UPPER_MASK)|(this.mt[0] & LOWER_MASK);
this.mt[this.N-1] = this.mt[this.M-1] ^ (y >>> 1) ^ mag01[y & 1];
this.mti = 0;
}
/* Tempering */
y = this.mt[this.mti++]
y ^= (y >>> 11);
y ^= (y << 7) & 0x9d2c5680;
y ^= (y << 15) & 0xefc60000;
return (y ^ (y >>> 18)) >>> 0;
}
MersenneTwister.prototype.random = function()
{
return this.int32()*2.3283064365386963e-10;
}
var m = new MersenneTwister(20041977);
console.log( 0.4845503899268806 );
console.log( m.random() );
console.log( 0.08081629197113216 );
console.log( m.random() );