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

        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)就可以了。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值