Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Random 在Lua中获取随机数的其他方法_Random_Lua - Fatal编程技术网

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

Random 在Lua中获取随机数的其他方法,random,lua,Random,Lua,我正在寻找一种替代方法,在Lua中获得一个介于最小值和最大值之间的随机数,而无需使用math.random()。有办法吗?它不一定是一个简单的方法。就像注释所暗示的那样,在类似Unix的系统上,您可以从/dev/random或/dev/uradom读取字节,并从中创建一个随机数 urand = assert (io.open ('/dev/urandom', 'rb')) rand = assert (io.open ('/dev/random', 'rb')) function RNG (

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

就像注释所暗示的那样,在类似Unix的系统上,您可以从
/dev/random
/dev/uradom
读取字节,并从中创建一个随机数

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

作为对这个答案的扩展,为了好玩,我编写了一个非常小的模块,以便未来的读者可以简单地使用
/dev/random
/dev/uradom
接口。这里有一个简短的概述

使用安装或手动获取

$ luarocks install randbytes
需要模块或文件

$ lua
> randbytes = require 'randbytes'
然后抓取一些字节

> print (randbytes (8))
现在,我已经清理并包含了上面显示的用于生成基本随机数的非常简单的生成算法

> print (randbytes:urandom (16))

您可以在基本接口的基础上构建以实现自己的算法。有关方法和设置的完整列表,请阅读。

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