Documentation for this module may be created at Module:Sandbox/Sakretsu/doc
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