加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

为什么lua中某些平台上的第一个随机数始终相同?

发布时间:2020-12-15 00:16:16 所属栏目:大数据 来源:网络整理
导读:请考虑以下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)) endend 在Linux机器上,结果如预期的那样是随机数.但似乎至少在Mac OS
请考虑以下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机器上,“Seeding with …”之后的第一个数字始终为66.

解决方法

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

C90标准和POSIX都提出了rand和srand的跨平台实现,这不是最好的.它特别缺乏低位的随机性.

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

OS / X仍然适用于经典的rand实现,Lua继承了它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读