考虑以下 lua 代码片段:
local time = os.time()
for _= 1, 10 do
time = time + 1
print('Seeding with ' .. time)
math.randomseed(time)
for i = 1, 5 do
print('\t' .. math.random(100))
end
end
在 Linux 机器上,正如预期的那样,结果是随机数。但似乎至少在Mac OS X上,改变种子后的第一个随机数总是相同的!
我想这与 Lua 依赖 C rand() 函数来生成随机数有关,但是有人有解释吗?
编辑:这里是上述代码在 Linux 机器上的输出摘录(即输出符合预期):
$ lua test.lua
Seeding with 1232472273
69
30
83
59
84
Seeding with 1232472274
5
21
63
91
27
[...]
在 OS X 机器上,“播种...”之后的第一个数字始终是 66。
Lua的随机使用C的rand(3)
and srand(3)
功能 (see here)。更新:较新的 Lua 版本在可用的情况下使用 random(3).
C90 标准和 POSIX 都建议跨平台实现rand
and srand
那不是最好的。它尤其缺乏低位的随机性。
一些平台(例如 Linux)放弃了标准建议,转而采用更好的实现方式(例如随机(3)).
OS/X 依然忠于经典rand
实现,Lua 继承它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)