使用 Lua 获取随机数的其他方式

我正在寻找一种在 Lua 中获取介于最小值和最大值之间的随机数的替代方法,而不使用 math.random()。有没有办法?它不一定要是简单的方法。

点赞
用户2505965
用户2505965

像评论所提示的那样,在类 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 进行安装,或手动获取。

$ luarocks install randbytes

引用该模块或文件。

$ lua
> randbytes = require 'randbytes'

然后获取一些字节。

> print (randbytes (8))

目前,我清理并包含了上面显示的非常简单的生成算法,用于生成基本的随机数。

> print (randbytes:urandom (16))

您可以在基本接口的基础上构建自己的算法。阅读文档以获取完整的方法和设置列表。

2015-06-26 23:33:50