【发布时间】:2013-09-11 21:59:49
【问题描述】:
我无法访问 Lua 4.0 中的 random()(不要问),所以我需要推出自己的随机数生成器。或者更确切地说,我必须推出另一个一个,因为我几年前实施的那个现在让我失望了。 IE。我注意到重复值很糟糕。
我可以使用任何用 Lua 编写的建议或示例吗?仅供参考,这是我迄今为止一直在使用的:
seedobja = 1103515245
seedobjc = 12345
seedobjm = 4294967295 --0x100000000
function srandom(seedobj, fVal1, fVal2)
seedobj[1] = mod(seedobj[1] * seedobja + seedobjc, seedobjm)
local temp_rand = seedobj[1] / (seedobjm - 1)
if (fVal2) then
return floor(fVal1 + 0.5 + temp_rand * (fVal2 - fVal1))
elseif (fVal1) then
return floor(temp_rand * fVal1) + 1
else
return temp_rand
end
end
[编辑]
后来的编辑被删除了。
【问题讨论】:
-
如果您可以访问 os.clock() 这应该会为您提供合适的种子。
-
所以我还是要问一下,为什么
math.random不可用? -
这是一款视频游戏,开发人员决定用一个每次游戏开始时获取新种子的函数替换/覆盖 random()。我需要一个脚本,每次运行脚本时,我都可以依靠它产生相同的结果和相同的种子。从时钟中获取种子对我没有帮助。
-
有人用 Lua 重写了 Marsenne twister 脚本吗?
-
如果你能找到一个用 Lua 编写的散列函数,你可以使用任何散列函数作为良好的伪随机数生成器。