📅  最后修改于: 2023-12-03 15:14:01.790000             🧑  作者: Mango
在编程中,常常需要使用随机数生成器来模拟一些复杂的情景。比如在游戏开发中,我们需要随机生成敌人的位置、属性等。在模拟系统中,我们也需要随机生成一些数据来模拟真实情况。
在c++中,标准库提供了一个随机数生成器,即std::rand()函数。但是这个函数生成的随机数并不是均匀分布的,即有些数出现的概率比其他数高。如果我们需要均匀分布的随机数,需要使用其他方式。
下面介绍两种生成均匀分布随机数的方法:
C++11标准引入了一个新的随机数库,即
代码片段如下:
#include <random>
#include <iostream>
using namespace std;
int main() {
random_device rd; //获取随机数种子
mt19937 gen(rd()); //使用随机数种子初始化mt19937生成器
uniform_int_distribution<> dis(1, 6); //生成1到6的均匀分布整数
for (int i = 0; i < 10; ++i) {
cout << dis(gen) << " "; //输出随机数
}
cout << endl;
return 0;
}
C语言中的rand()函数可以生成随机数,但是它生成的随机数并不是均匀分布的。我们可以通过一些处理,实现生成均匀分布的随机数。
代码片段如下:
#include <cstdlib>
#include <iostream>
using namespace std;
int main() {
int range = 6; //生成1到range的均匀分布整数
int buckets = RAND_MAX / range; //划分成range个桶
int r;
do {
r = rand() / buckets; //将每个桶中的数等概率映射到1~range
} while (r > range);
for (int i = 0; i < 10; ++i) {
cout << r + 1 << " "; //输出随机整数
}
cout << endl;
return 0;
}
以上就是生成均匀分布随机数的两种方法。在使用时,需要根据实际情况选择合适的方法。