HSPのrndを(ry

var randomize;
var rnd;
(function(){
	var x = 1;
	randomize = function(a) { x = (a||+new Date)|0; };
	rnd = function(a) {
		x = (x*214013|0)+2531011|0;
		return ((x >> 16) & 32767) % a;
	};
})();

var pre = document.body.appendChild(document.createElement('pre'));
randomize(12345);
for( var i = 0; i < 10; i ++ ) {
	pre.appendChild(document.createTextNode(rnd(1000)+"\n"));
}

32bit な signed int が欲しけりゃ、その都度 x|0 とか ~~x とかすればよさそうですね

追記

0xffffffff * 0xffffffff | 0 とかは倍精度浮動小数点数で扱える整数の範囲を越えるからか値が違いますね。

* 214013 は多分大丈夫...?
31+Math.log(214013)/Math.log(2) => 48.70733890875432 は 53 以下だから。。。どうだろう?