在Lua中获取随机数的其他方法

4

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


为什么math.random不适合?你尝试过在网上搜索“lua随机数”吗? - Etan Reisner
也许你应该说明为什么要避免使用随机数。你是否需要熵? - Marged
4
如果您在Linux或Mac OS X上运行,您可以从/dev/random/dev/urandom读取字节。 - lhf
math.random()并不是不合适的,我只是想知道是否有其他获取随机数的方法。 - Nolin M.
1个回答

6

正如评论所提示的,在类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))

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

1
谢谢,这正是我想要的答案! - Nolin M.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接