Lua生成比较理想的随机数的方法

转载原文1

转载原文2

获取随机数方法及示例

--1.指定最小值和最大值获取随机数
--2.setRandom为选填参数,当该值为:true时,会设置随机数种子
--3.值得注意的是,当循环调用时请勿填入setRandom参数,否则返回随机数相同
function randomNum(numMin, numMax, setRandom)
    if setRandom then
        math.randomseed(tostring(os.time()):reverse():sub(1, 7)) --设置时间种子
    end
    local reNum = math.random(numMin, numMax)
    return reNum
end
--下方为调用示例--
for i = 1, 8 do
    print(randomNum(1, 10000))
end
print("_________")
math.randomseed(tostring(os.time()):reverse():sub(1, 7)) --设置时间种子
for i = 1, 8 do
    print(randomNum(1, 10000, true))
end

 

一、[lua]获取随机数

lua的math.random函数可以返回伪随机数.

调用方式 取值范围

调用方式取值范围
math.random() [0,1)
math.random(max) [1,max]
math.random(min, max) [min,max]

 

注意:
在一个程序启动时,默认固定以1为种子初始化随机数发生器,也就是说每次程序启动运行返回的都是固定顺序的伪随机数序列.
如果需要每次启动都返回不同的随机数序列则可以通过调用math.randomseed(os.time()) 手动设定种子.

 

二、Lua生成比较理想的随机数的方法

lua需要生成随机数的需求也是很常见的,为了生成看起来更随机的数字,我们需要注意以下几点

  1. 我们也需要给随机数设置随机数种子:math.randomseed(xx)
  2. lua对随机数种子也是有一定要求的:不能太相近
  3. lua中的os.time()是基于秒的,不太满足lua对随机数种子的要求(如果设置随机数种子的频率太高的话)

那怎么做?
把 os.time()返回的数值字串倒过来再取高位7位。 这样,即使 os.time()变化很小,随机数种子也会很大

math.randomseed(tostring(os.time()):reverse():sub(1, 7))

 

例:

math.randomseed(tostring(os.time()):reverse():sub(1, 7)) --设置时间种子

for i=1, 15 do
print(math.random()) --产生0到1之间的随机数
print(math.random(1,100)) --产生1到100之间的随机数
end

 

posted @ 2022-05-23 16:16  青丝·旅人  阅读(1723)  评论(0编辑  收藏  举报