add Random class

This commit is contained in:
MihailRis 2025-09-16 20:27:07 +03:00
parent 28afa4b6bf
commit 532c4887bc
3 changed files with 38 additions and 1 deletions

View File

@ -0,0 +1,35 @@
local Random = {}
local M = 2 ^ 31
local A = 1103515245
local C = 12345
function Random.randint(self)
self._seed = (A * self._seed + C) % M
return self._seed
end
function Random.random(self, a, b)
local num = self:randint() % M / M
if b then
return math.floor(num * (b - a + 1) + a)
elseif a then
return math.floor(num * a + 1)
else
return num
end
end
function Random.seed(self, number)
if type(number) ~= "number" then
error("number expected")
end
self._seed = number
end
return function(seed)
if seed and type(seed) ~= "number" then
error("number expected")
end
return setmetatable({_seed = seed or random.random(M)}, {__index = Random})
end

View File

@ -668,3 +668,5 @@ end
bit.compile = require "core:bitwise/compiler" bit.compile = require "core:bitwise/compiler"
bit.execute = require "core:bitwise/executor" bit.execute = require "core:bitwise/executor"
random.Random = require "core:internal/random_generator"

View File

@ -12,7 +12,7 @@ static int l_random(lua::State* L) {
std::uniform_real_distribution<> dist(0.0, 1.0); std::uniform_real_distribution<> dist(0.0, 1.0);
return lua::pushnumber(L, dist(randomEngine)); return lua::pushnumber(L, dist(randomEngine));
} else if (argc == 1) { } else if (argc == 1) {
std::uniform_int_distribution<integer_t> dist(0, lua::tointeger(L, 1)); std::uniform_int_distribution<integer_t> dist(1, lua::tointeger(L, 1));
return lua::pushinteger(L, dist(randomEngine)); return lua::pushinteger(L, dist(randomEngine));
} else { } else {
std::uniform_int_distribution<integer_t> dist( std::uniform_int_distribution<integer_t> dist(