男儿欲遂平生志,五经勤向窗前读。这篇文章主要讲述随机数函数rand()相关的知识,希望能为你提供帮助。
1,使用前提
rand()和srand()要一起使用,其中srand()用来初始化随机数种子,rand()用来产生随机数。
【随机数函数rand()】
因为默认情况下随机数种子为1,而相同的随机数种子产生的随机数是一样的,失去了随机性的意义,所以为使每次得到的随机数不一样,用函数srand()初始化随机数种子。srand()的参数,用time函数值(即当前时间),因为两次调用rand()函数的时间通常是不同的,这样就可以保证随机性了。
2,随机数产生的范围
要取得[a,b)的随机整数,使用(rand() % (b-a))+ a (结果值含a不含b)。
要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a (结果值含a和b)。
要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1 (结果值不含a含b)。
(总的来说,通用公式:a + rand() % n
;其中的a是起始值,n是整数的范围)
要取得a到b之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。
要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。
3,原理
rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统。
??:为得到不同的随机数序列,则需改变这个种子的值。方法:在开始产生随机数前,调用一次srand(time(NULL))。
??:srand()一定要放在循环外面或者是循环调用的外面,否则的话得到的是相同的随机数。
4,实战
#include
#include
using namespace std;
#define range_Max_Num 100 //定义范围上界
#define range_Min_Num 70//定义范围下界
int main()
struct timeval tv;
gettimeofday(& tv,NULL); //获得当前时间
srand(tv.tv_usec); //以微秒为种子
int x = rand() % (range_Max_Num - range_Min_Num + 1) + range_Min_Num;
cout< < x < < endl;
return 0;
推荐阅读
- css - 实现镜头拉近效果
- 作为面试官被放鸽子的50个理由,论如何放面试官的鸽子
- 实战案例(Zabbix监控MySQL主机)
- 产品经理应该做什么,产品经理要具备哪些能力
- Burp半自动时间盲注
- 手把手教你如何高效落地单项目管理 | 一看既会
- IDEA创建JavaWeb项目并配置Tomcat
- 实战案例(prometheus监控Tomcat(JMX))
- Python常用标准库(pickle序列化和JSON序列化)