אין תקציר עריכה |
אין תקציר עריכה |
||
| שורה 2: | שורה 2: | ||
function | local function getBigRandom(l, u) | ||
return math.random(args[1] | -- Gets a random integer between l and u, and is not limited to RAND_MAX. | ||
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(f) | |||
-- Gets a random number. | |||
first = tonumber(f.args[1]) | |||
second = tonumber(f.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 | end | ||
return p | return p | ||
גרסה מ־02:46, 9 במרץ 2025
ניתן ליצור תיעוד על היחידה הזאת בדף יחידה:Random/תיעוד
local p = {}
local function getBigRandom(l, u)
-- Gets a random integer between l and u, and is not limited to RAND_MAX.
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(f)
-- Gets a random number.
first = tonumber(f.args[1])
second = tonumber(f.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