gpt4 book ai didi

random - 为什么在lua的某些平台上第一个随机数总是相同的?

转载 作者:行者123 更新时间:2023-12-04 16:57:17 27 4
gpt4 key购买 nike

考虑以下 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 机器上,“Seed with ...”之后的第一个数字总是 66。

最佳答案

Lua 的 random 过去用 C 的 rand(3)srand(3)函数 ( see here )。更新:较新的 Lua 版本 use random(3) where available .

C90 标准和 POSIX 都建议跨平台实现 randsrand那不是最好的。它尤其缺乏低位的随机性。

一些像 Linux 这样的平台从标准建议转移到更好的实现(例如 random(3) )。

OS/X 仍然忠于经典 rand实现,Lua 继承了它。

关于random - 为什么在lua的某些平台上第一个随机数总是相同的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/461978/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com