Я ищу альтернативный способ получить случайное число в Lua, которое находится между минимальным и максимальным числом без использования math.random()
. Там в любом случае? Это не должен быть простой метод.Другие способы получить случайное число в Lua
ответ
Как и в комментариях к 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
или захватить file вручную.
$ luarocks install randbytes
Требование к модулю или файлу.
$ lua
> randbytes = require 'randbytes'
И затем захватите несколько байтов.
> print (randbytes (8))
На данный момент я очистил и включил в себя простой алгоритм простого поколения, показанный выше, для генерации базовых случайных чисел.
> print (randbytes:urandom (16))
Вы можете построить поверх основного интерфейса, чтобы реализовать свои собственные алгоритмы. Прочтите documentation для получения полного списка методов и настроек.
Спасибо, это тот ответ, который я искал! –
Почему 'math.random' непригодно? Вы пробовали искать 'lua random' онлайн? –
Возможно, вам следует указать причину, по которой вы хотите избежать случайности. Вы скучаете по энтропии? – Marged
Если вы работаете в Linux или Mac OS X, вы можете читать байты из '/ dev/random' или'/dev/urandom'. – lhf