Lua产生随机数

Lua产生随机数

综合了两处,网址如下:
http://segmentfault.com/q/1010000000268826
http://www.happear.cn/2014/08/17/131.html

Lua 生成随机数需要用到两个函数:

math.randomseed(xx),

math.random(n,m)–表示结果从n到m之间

  • 然而看到这样的问题:

实际上我是遇到的是高并发web应用的情况下,比如秒杀场景,大家的时间都可能是相同的,随之带来的产生的随机数都是相同的,或者是接近的。
我在想是否可以利用Header里来做随机数的种子,比如IP之类,这样考虑是否合理?
感觉Lua处理随机数很蛋疼....

  • 他们的解决方法:

lua需要生成随机数的需求也是很常见的,为了生成看起来更随机的数字,我们需要注意以下几点
我们也需要给随机数设置随机数种子:math.randomseed(xx)
lua对随机数种子也是有一定要求的:不能太相近
lua中的os.time()是基于秒的,不太满足lua对随机数种子的要求(如果设置随机数种子的频率太高的话)
那怎么做?
把 os.time()返回的数值字串倒过来再取高位7位。 这样,即使 os.time()变化很小,随机数种子也会很大
math.randomseed(tostring(os.time()):reverse():sub(1, 7))

  • 经过测试,对比两组数据,没有太过相近。可能是我测试数据量过小的原因,我测试的输出200个数据。但是这是个方法,以后说不定会遇到这样的问题,于是摘录下来:

math.randomseed(os.time())
--math.randomseed(tostring(os.time()):reverse():sub(1, 7))
for i=1, 200 do
print(math.random())
--print (math.random(1,10000))
end

发表评论

电子邮件地址不会被公开。 必填项已用*标注