您的位置:首页 > 编程语言 > Lua

lua如何产生随机数,以及需要注意的问题

2015-01-14 10:04 232 查看
        LUA中的自带函数库中有两个关于随机数的函数,一个是random,一个是randomseed。

random有两个参数,用来设置随机数的范围,比如random(1,100)设置随机数的范围为1至100之间。

(random函数说明)This function is an interface to the simple pseudo-random generator function 
rand
 provided by ANSI C.
由于C中所产生的随机序列是固定的。也就是每次执行时取得的随机数是一样的。LUA的random函数说明已经指出,lua的random函数只是对ansi c的随机函数的一次封装。所以依然存在这个问题。执行random(1,600),每次的输出结果都是:

[LUA-print] 1

[LUA-print] 79

[LUA-print] 454

[LUA-print] 276

[LUA-print] 320

[LUA-print] 132

[LUA-print] 29

[LUA-print] 408

[LUA-print] 408

[LUA-print] 561
这个只是伪随机,并不能达到我们想要的效果,于是另一个函数的用处就有了。

randomseed()函数,设置随机数的种子。在lua虚拟机启动的时候设置一个随机种子,让系统产生的随机序列不相同,但使用randomseed的时候也还要注意一个问题,那就是做种子的数要足够的大,大于10000就行了。不然randomseed所产生的随机序列的第一个值还是很小。原因是randomseed是直接封装了C的srand,如果种子的值太小,那么srand所产生的序列和默认序列(srand(1)所产生的序列)是相差不大的,序列的第一个值还是很小。

        因此,只要在lua虚拟机启动的时候调用一下randomseed(os.time())就可以解决这个问题了。但是这样依然还有问题存在。

虽然可以获取我们想要的真正的随机数了,但是有个缺陷就是每次第一次调用时获取的随机数依然就固定的,至于原因就涉及到lua内部实现了。解决方法很简单,就是在设置随机种子的时候调用一下random函数,随后就能正常获取随机数了。

在lua虚拟机启动的时候调用:

    --设置随机种子

    math.randomseed(os.time())

    math.random(1,10000)

需要随机数的时候只需要调用:random(1,600)就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐