Module:Sandbox/Sakretsu

local p = {}

function p.main(frame) local max = tonumber(frame.args[1]) if not max then return end local n = string.match(mw.site.stats.edits + mw.site.stats.pages + os.time, '%d%d%d$') n = tonumber(n) while n > max do		n = n - max end return n end

local function getBigRandom(l, u) -- Gets a random integer between l and u, and is not limited to RAND_MAX. math.randomseed(mw.site.stats.edits + mw.site.stats.pages + os.time + math.floor(os.clock * 1000000000)) local r = 0 local n = 2^math.random(30) -- Any power of 2. local limit = math.ceil(53 / (math.log(n) / math.log(2))) for i = 1, limit do		r = r + math.random(0, n - 1) / (n^i) end return math.floor(r * (u - l + 1)) + l end

function p.number(frame) -- Gets a random number. first = tonumber(frame.args[1]) second = tonumber(frame.args[2]) -- This needs to use if statements as math.random won't accept explicit nil values as arguments. if first then if second then if first > second then -- Second number cannot be less than the first, or it causes an error. first, second = second, first end return getBigRandom(first, second) else return getBigRandom(1, first) end else return math.random end end

return p