【问题标题】:Other ways to get a random number in Lua在 Lua 中获取随机数的其他方法
【发布时间】:2015-06-26 21:10:21
【问题描述】:

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

【问题讨论】:

  • 为什么math.random 不合适?您是否尝试过在线搜索lua random
  • 也许你应该给出你想要避免随机的理由。你想念熵吗?
  • 如果您在 Linux 或 Mac OS X 中运行,您可以从/dev/random/dev/urandom 读取字节。
  • math.random() 并不是不合适,我只是想知道是否还有其他方法可以获取随机数。

标签: random lua


【解决方案1】:

就像 cmets 所暗示的那样,在类 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))

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

【讨论】:

  • 谢谢,这正是我正在寻找的答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 2022-01-24
  • 2020-10-08
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
相关资源
最近更新 更多