首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在lua的某些平台上,第一个随机数总是相同的?

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

Stack Overflow用户
提问于 2009-01-20 16:14:24
回答 4查看 4.8K关注 0票数 5

考虑下面的lua代码片段:

代码语言:javascript
复制
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上,更改种子后的第一个随机数总是相同的!

我猜这与Lua依赖于C rand()函数来生成随机数有关,但是谁能解释一下呢?

编辑:以下是上面代码在linux机器上的输出摘录(即输出与预期一致):

代码语言:javascript
复制
$ lua test.lua
Seeding with 1232472273
    69
    30
    83
    59
    84
Seeding with 1232472274
    5
    21
    63
    91
    27
[...]

在OS X机器上,"Seeding with ...“之后的第一个数字总是66岁。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-01-20 17:54:38

Lua的随机数用来使用C的rand(3)srand(3)函数(see here)。更新:较新的Lua版本use random(3) where available

C90标准和POSIX都建议使用randsrand的跨平台实现,但这并不是最好的。它在低位特别缺乏随机性。

一些平台,如Linux,脱离了标准建议,转向了更好的实现(例如random(3))。

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

票数 4
EN

Stack Overflow用户

发布于 2009-01-20 17:51:13

通常情况下,使用数值接近的种子多次调用srand不是一个好主意(特别是使用时间值)。在许多情况下,第一个随机数的方差与种子的方差相似。在处理必须转换数字表示形式的脚本语言时,情况可能会更糟。

如果您将种子值更改更多,是否也会发生同样的情况?

票数 2
EN

Stack Overflow用户

发布于 2009-01-21 07:21:46

正如其他人所指出的,出于可移植性的考虑,Lua有意使用C90随机生成器--而C90 RNG并不是很好。

如果你需要好的随机数,使用一些Lua模块来获得它。例如,here是Lua作者之一的Mersenne Twister RNG绑定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/461978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档