Skip to content

Instantly share code, notes, and snippets.

@Amitesh
Created September 30, 2015 11:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Amitesh/694bf6437d3c6d725193 to your computer and use it in GitHub Desktop.
Save Amitesh/694bf6437d3c6d725193 to your computer and use it in GitHub Desktop.
A linear congruential generator (LCG) is an algorithm that yields a sequence of pseudo-randomized numbers calculated with a discontinuous piecewise linear equation.
/**
* Linear Congruential Generator
* http://en.wikipedia.org/wiki/Linear_congruential_generator
*/
function RandomNumberGeneratorFn($log) {
'use strict';
$log = $log || console;
function RandomNumberGenerator() {
}
RandomNumberGenerator.A = 0x5DEECE66D;
RandomNumberGenerator.C = 0xB;
/*jshint bitwise:false */
RandomNumberGenerator.RANGE = 1 << 49;
RandomNumberGenerator.r = 1;
RandomNumberGenerator.setSeed = function (seed) {
if (isNaN(seed)) {
throw new Error('seed [' + seed + '] not valid');
//return false; // unreachable
}
var num = parseInt(seed);
RandomNumberGenerator.r = num;
$log.debug('seed: ' + seed);
return true;
};
RandomNumberGenerator.random = function () {
RandomNumberGenerator.r =
(((RandomNumberGenerator.A * RandomNumberGenerator.r) +
RandomNumberGenerator.C) % RandomNumberGenerator.RANGE);
/*jshint bitwise:false */
return RandomNumberGenerator.r >> 3;
};
RandomNumberGenerator.integer = function (min, max) {
var returnValue = parseInt(min) + parseInt(RandomNumberGenerator.random() % (max - min + 1));
//$log.debug('min: ' + min + ':: max: ' + max+ ':: return: ' + returnValue);
return returnValue;
};
RandomNumberGenerator.float = function (min, max, decimal) {
if (!decimal) {
decimal = 2;
}
var multiplier = (10 * decimal);
var integerValue = RandomNumberGenerator.integer(min * multiplier, max * multiplier);
var returnValue = integerValue / multiplier;
$log.debug('min: ' + min + ':: max: ' + max + ':: return: ' + returnValue);
return returnValue;
};
RandomNumberGenerator.randomNumber = function () {
/*jshint bitwise:false */
return RandomNumberGenerator.random() / (RandomNumberGenerator.RANGE >> 3);
};
return RandomNumberGenerator;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment