我们知道可以用srand()和rand()函数来产生随机数,但是这个具体怎么用呢,先看一个例子:
int main()
{
srand(1); int random;
for(int i=0;i<10;i++)
{
random = rand()%5;
cout<<random<<" ";
}
system("pause");
return 0;
}
输出:可以看出里面有重复的值。并且每次执行输出的数的序列都一样。
去掉srand(1);输出的还是同样的数。
函数srand()可以为随机数生成器播散种子,只要种子不同,rand()函数就会产生不同的随机数序列,srand()称为随机数生成器的初始化器。当提供的种子相同时,随机数序列也是相同的。当种子为1时,与不使用srand()函数是一样的,也就是说rand()的默认种子是1.
2、将随机数的种子改为8,来看一下:
int main()
{
srand(8);int random;
for(int i=0;i<10;i++)
{
random = rand()%5;
cout<<random<<" ";
}
system("pause");
return 0;
}
输出:虽然输出结果和种子是1的时候不同,但是每次运行后的结果都是相同的。
3、指定seed为当前系统流逝了的时间(单位为秒):
#include <ctime>
int main()
{
srand((unsigned)time(0));
int random;
for(int i=0;i<10;i++)
{
random = rand()%5;
cout<<random<<" ";
}
cout<<time(0)<<endl;
system("pause");
return 0;
}
运行后每次产生的随机数都不一样,因为每次启动程序的时刻都不同。关于time_t time(0):
time_t被定义为长整型,它返回从1970年1月1日零时零分零秒到目前为止所经过的时间,单位为秒。比如假设输出:
cout < <time(0);
cout<<hex<<"0x"<<RAND_MAX<<endl;
输出0x7fff, 在stdlib.h头文件中,定义了宏 #define RAND_MAX 0x7fff将rand()的返回值与5求模是必须的,这样才能确保目的随机数落在[0,5)之间,否则rand()的返回值本身可能是很巨大的。
一个通用的公式是: 要取得[a,b)之间的随机整数,使用(rand()%(b-a))+a(结果值将含a不含b)。
在a为0的情况下,简写为rand()%b。伪随机浮点数:
用rand()/double(RAND_MAX)可以取得0~1之间的浮点数(注意,不同于整型时候的公式,是除以,不是求模)