Notice: Undefined offset: 828 in /home/maccabit/domains/maccabipedia.co.il/public_html/skins/Metrolook/customize/includes/app-header.php on line 59
יחידה:Random: הבדלים בין גרסאות בדף
מתוך מכביפדיה
אין תקציר עריכה
אין תקציר עריכה
תגית: שחזור ידני
 
(10 גרסאות ביניים של אותו משתמש אינן מוצגות)
שורה 1: שורה 1:
local p = {}


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)
function p.number(args)
math.randomseed(os.time())
-- Gets a random number.
first = tonumber(args[1])
second = tonumber(args[2])
math.randomseed(os.time())
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.
-- This needs to use if statements as math.random won't accept explicit nil values as arguments.
if first then
if first then
שורה 17: שורה 24:
first, second = second, first
first, second = second, first
end
end
return math.random(first, second)
return getBigRandom(first, second)
else
else
return math.random(1, first)
return getBigRandom(1, first)
end
end
else
else
שורה 25: שורה 32:
end
end
end
end


return p
return p

גרסה אחרונה מ־02:52, 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)
	math.randomseed(os.time())
	
	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