暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

直观的表现 PRNG 周期性

poslua 2017-12-13
242

我在前面的一些文章中介绍过:Lua 随机数算法用的是 LCG(32位的随机数,周期最多为2^32^); LuaJIT 用的是 LFSR,周期达到 2^223^。下面是我分别用 Lua 和 LuaJIT 的随机数填充一个位图,代码:

#!/usr/bin/env lua
-- Draws the B/W image with lua-gd

local gd = require "gd"

local size = 512
local im = gd.createPalette(size, size)

local white = im:colorAllocate(255, 255, 255)
local black = im:colorAllocate(0, 0, 0)

math.random(os.time())

for y = 1, size do    for x = 1, size do        local dot = math.random(2)
       if dot == 2 then            im:setPixel(y, x, black)
       end    end
end

im:png("lua-random.png")

  • Lua

  • LuaJIT

可以看到,Lua 和 LuaJIT 几乎看不出区别。对于一般性的任务,一个设计良好的 LCG 方法可能已经足够「随机」了。

这个是知乎@余天升用 php 的 rand
函数生成的随机数填充的位图:


哪个比较差一目了然。



赞赏是对作者最大的支持

文章转载自poslua,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论