我正在寻找另一种方法来获取Lua中的随机数,该数字介于最小和最大数之间而不使用math.random()
。有什么办法吗?它不一定是一个简单的方法。
答案 0 :(得分:5)
就像评论所暗示的那样,在类Unix系统上,您可以从/dev/random
或/dev/urandom
读取字节,并从中创建一个随机数。
urand = assert (io.open ('/dev/urandom', 'rb'))
rand = assert (io.open ('/dev/random', 'rb'))
function RNG (b, m, r)
b = b or 4
m = m or 256
r = r or urand
local n, s = 0, r:read (b)
for i = 1, s:len () do
n = m * n + s:byte (i)
end
return n
end
作为此答案的扩展,为了好玩,我创作了一个非常小的模块randbytes
,以便将来的读者可以使用/dev/random
和/dev/urandom
接口以一种简单的方式。这是一个快速下来。
$ luarocks install randbytes
需要模块或文件。
$ lua
> randbytes = require 'randbytes'
然后抓住一些字节。
> print (randbytes (8))
目前,我已经清理并包含上面显示的非常简单的生成算法,用于生成基本随机数。
> print (randbytes:urandom (16))
您可以在基本界面的基础上构建自己的算法。阅读documentation以获取完整的方法和设置列表。