lua随机函数-math.random

lua的随机函数:                                     

math.randomseed()  设置seed 

math.random()  产生随机数

没有设置seed使用了random函数,每次随机的值都是一样的,很疑惑,所以查看了lua的源代码。查看源代码后,发现randomseed调用的是srand,random调用的是rand

实际上,math.randomseed()就是设置了随机函数用来产生数字的唯一必要的参数,没有设置的话,就是默认的值,因此产生的值也是不会变的。

rand中产生新的随机数,都用到上一个随机数结果,这个算法实际上很简答,看完就可以发现,如果最开始的seed相同,产生的一系列的rand值都是一样的(在math.random中还会rand返回的值进行了处理,但是也不会改变他的随机性)

综上:

1、使用math.random一定要设置随机数种子。

2、种子相近,最开始的几个随机数结果有可能是相同的(这个是和math.random的调整有关系)


解决了困惑好开心·~~

/*

* 描述:函数rand() 用于生成介于 0和RAND_MAX之间的伪随机整数序列

*      其中RAND_MAX是在头文件 中定义的符号常 量, RAND_MAX的取值至少为32767

* 输入:无

* 输出:返回取值在0~RAND_MAX之间的伪随机数

*/

int rand(void)

{

next = next *1103515245 +12345;

return (unsigned int)(next/65536) % (RAND_MAX);

}

/*

* 描述: srand函数用参数seed作为生成伪随机数序列的函数rand的种子

* 输入:种子seed

* 输出:无

*/

void srand(unsigned int seed)

{

next = seed;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容