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;
}