佚名通过本文主要向大家介绍了lua 随机数,lua随机数种子,lua生成随机数,lua 取随机数,lua产生随机数等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:关于lua产生随机数的问题
描述:
解决方案1:
描述:
lua产生随机数
math.randomseed(os.time())
rand = math.random();
实际上我是遇到的是高并发web应用的情况下,比如秒杀场景,大家的时间都可能是相同的,随之带来的产生的随机数都是相同的,或者是接近的。
我在想是否可以利用Header里来做随机数的种子,比如IP之类,这样考虑是否合理?
感觉Lua处理随机数很蛋疼....
解决方案1:
lua的随机数生成算法是直接用的C运行时的rand函数,既线性同余法,优点是运算速度快,缺点是随机性有限制。
如果你需要更精确的的随机数算法可以考虑使用梅森旋转算法(http://en.m.wikipedia.org/wiki/Mersenne_twister),这里有一个lua实现(lrandom):http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/
math.randomseed( tonumber(tostring(os.time()):reverse():sub(1,6)) ) 仅供参考。。。
解决方案3:楼主随机数用法有点问题。设置随机数的seed表示初始的随机性,在楼主描述的场景下,math.randomseed(os.time())只用调用一次,例如在lua虚拟机启动时候调用一下,之后的每个请求只用rand = math.random();即可,默认生成0~1之间的浮点数。
解决方案4:所以别用os.time()
当seed,给lua包装一个能获取毫秒/微秒的函数就好了。觉得逼格不够的话还可以从/dev/random
或者/dev/urandom
里面倒腾数据出来当seed。