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() );