📜  c++ 随机数生成器均匀分布 - C++ (1)

📅  最后修改于: 2023-12-03 15:14:01.790000             🧑  作者: Mango

c++ 随机数生成器均匀分布介绍

在编程中,常常需要使用随机数生成器来模拟一些复杂的情景。比如在游戏开发中,我们需要随机生成敌人的位置、属性等。在模拟系统中,我们也需要随机生成一些数据来模拟真实情况。

在c++中,标准库提供了一个随机数生成器,即std::rand()函数。但是这个函数生成的随机数并不是均匀分布的,即有些数出现的概率比其他数高。如果我们需要均匀分布的随机数,需要使用其他方式。

下面介绍两种生成均匀分布随机数的方法:

使用C++11的随机数库

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()函数

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;
}

以上就是生成均匀分布随机数的两种方法。在使用时,需要根据实际情况选择合适的方法。