我在前面的一些文章中介绍过: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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




