tetris-prng
Version:
A Fibonacci linear feedback shift register used as a PRNG (Pseudo-random Number Generator), as in NES Tetris.
26 lines (23 loc) • 684 B
JavaScript
function readable() {
var value = 0x8988 >>> 0;
return function () {
var bit0 = (value >> 16) & 1;
var bit1 = (value >> 15) & 1;
var bit2 = (value >> 13) & 1;
var bit3 = (value >> 4) & 1;
var leftmostBit = bit0 ^ bit1 ^ bit2 ^ bit3;
return (value = ((leftmostBit << 31) | (value >>> 1)) >>> 0);
}
}
function inlined() {
var value = 0x8988 >>> 0;
return function () {
return (value = (((((value >> 16) & 1) ^ ((value >> 15) & 1) ^ ((value >> 13) & 1) ^ ((value >> 4) & 1)) << 31) | (value >>> 1)) >>> 0);
}
}
var assert = require('assert');
var r = readable();
var i = inlined();
assert(r() === i());
assert(r() === i());
assert(r() === i());