随机数的生成

2021-06-10

介绍两个函数rand( );和srand( );
头文件:<stdlib.h>或<cstdlib>
函数原型:

int rand(void);
void srand(unsigned seed);

函数说明:
rand()函数产生的随机数严格意义讲不是真正的随机数,它里面采用了线性同余法计算出随机数,该方法有个最大周期M,也就是说该方法实在一定的范围内生成一串数字,不过这个M一般来说比较大,所以正常使用时一般看起来就是产生了随机的数,不过这个函数由于默认种子是1,所以每次产生的随机数都是相同的,也就是说每次运行程序,产生的随机数都是一样的,失去了部分随机的意义,所以一般会配合srand函数使用。

返回值: 返回0至RAND_MAX之间的随机整数值,RAND_MAX的值32767(16位系统)

srand()函数为rand()函数提供随机数种子,常用系统时间做参数time(NULL),需要time.h
两函数应该配合使用,如果不调用srand()直接使用rand(),则默认srand(1);

要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;
要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;
要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;
通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。
要取得a到b之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。
要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。

每次种子更新之后是什么?