function Marsaglia(i1, i2) {
      // from http://www.math.uni-bielefeld.de/~sillke/ALGORITHMS/random/marsaglia-c
      var z=i1 || 362436069, w= i2 || 521288629;
      var nextInt = function() {
        z=(36969*(z&65535)+(z>>>16)) & 0xFFFFFFFF;
        w=(18000*(w&65535)+(w>>>16)) & 0xFFFFFFFF;
        return (((z&0xFFFF)<<16) | (w&0xFFFF)) & 0xFFFFFFFF;
      };

      this.nextDouble = function() {
        var i = nextInt() / 4294967296;
        return i < 0 ? 1 + i : i;
      };
      this.nextInt = nextInt;
    }
Generates random numbers. Each time the random() function is called, it returns an unexpected value within
the specified range. If one parameter is passed to the function it will return a float between zero and the
value of the high parameter. The function call random(5) returns values between 0 and 5 (starting at zero,
up to but not including 5). If two parameters are passed, it will return a float with a value between the
parameters. The function call random(-5, 10.2) returns values starting at -5 up to (but not including) 10.2.
To convert a floating-point random number to an integer, use the int() function.

@param {int|float} value1         if one parameter is used, the top end to random from, if two params the low end
@param {int|float} value2         the top end of the random range

@returns {float}

@see randomSeed
@see noise