All pastes #2015762 Raw Edit

Miscellany

public text v1 · immutable
#2015762 ·published 2010-12-10 19:11 UTC
rendered paste body
awds_rng_reverse_iterate = function(number)
	number = (number ~= 0) and (number - 1) or 1073741823;
	-- State is tuple(A,B,C) satisfying A*x+B*x=c + 2^n*k
	local A = 4;
	local B = 5;
	local C = number;
	local i;
	local l = 0;
	local scale = 1;
	-- 30 bits in RNG state.
	for i = 0, 29 do
		l = l + scale * (C % 2);
		if C % 2 == 0 then
			A, B, C = 2 * A, B, C / 2;
		else
			A, B, C = 2 * A, 2 * A + B, (C - A - B) / 2;
		end
		scale = scale * 2;
	end
	return l;
end

awds_rng_forward_iterate = function(number)
	local low = number % 32768;		-- max of 32767
	local high = (number - low) / 32768;	-- max of 32767
	return (high * (262144 * low + 163840) + (low + 1) * (4 * low + 1)) % 1073741824;
end