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需要生成随机数的需求也是很常见的,为了生成看起来更随机的数字,我们需要注意以下几点
- 我们也需要给随机数设置随机数种子:math.randomseed(xx)
- lua对随机数种子也是有一定要求的:不能太相近
- 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