C++随机值相关函数

随机数指的是从一个可能的范围中挑选出一个值返回,每一个范围内的数字被选中的概率是一样的。C++中提供了一系列函数来实现随机数生成。

1. rand

rand函数每次都返回一个0~65536范围内的随机整数。这些随机数通过算法生成,并不是真正的随机数。

 1 #include <iostream>
 2 #include<cstdlib>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     for(int i=0;i<10;i++){
 8         int c = rand();
 9         cout<<c<<endl;
10     }
11     return 0;
12 }

2.srand

rand()算法需要一个起始值,称为种子,根据随机种子,rand算法会产生数据流。如果没有给定的话默认是1,所以如果每次都不指定随机种子,最终得到的数据流会完全相同,rand函数的返回结果也就一模一样。为了避免这种情况发生,需要在rand()调用之前指定种子,C++中是通过srand()函数实现的。

 1 #include <iostream>
 2 #include<cstdlib>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     unsigned seed;
 8     cin>>seed;
 9     srand(seed);
10     for(int i=0;i<10;i++){
11         int c = rand();
12         cout<<c<<endl;
13     }
14     return 0;
15 }

这样获取随机数都需要手动输入,比较麻烦。另外一种方式是通过当前时间进行初始化。

 1 #include <iostream>
 2 #include<cstdlib>
 3 #include<ctime>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     srand((unsigned)time(0));
 9     for(int i=0;i<10;i++){
10         int c = rand();
11         cout<<c<<endl;
12     }
13     return 0;
14 }

3. uniform_int_distribution和uniform_real_distribution

上面的两个函数能解决很多问题,但是还是不够全面,如果我们希望生成一个范围内的随机数呢,如果我们希望生成一个double类型的随机数呢?C++为我们提供了uniform_int_distribution和uniform_real_distribution两个模板类。调用这连个模型需要调用random库。

 1 #include <iostream>
 2 #include<cstdlib>
 3 #include<ctime>
 4 #include<random>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     default_random_engine random(time(0));     //生成随机种子的引擎
10     uniform_int_distribution<>dis1(0,100);
11     uniform_real_distribution<>dis2(0.0,1.0);
12 
13     for(int i=0;i<10;i++)
14         cout<<dis1(random)<<endl;
15     cout<<endl;
16 
17     for(int i=0;i<10;i++)
18         cout<<dis2(random)<<endl;
19     cout<<endl;
20     return 0;
21 }

 

上一篇:蒙特卡洛法计算圆周率π(Python)


下一篇:痒痒鼠挖土魂十python----最简单版本