📜  C++中的随机标头|第一组(发电机)(1)

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

C++中的随机标头|第一组(发电机)

介绍

C++中的随机标头是用于生成伪随机数的标准库头文件之一。它提供了多个随机数生成器和分布器,可以方便地生成不同范围内的随机数。

C++中的随机标头包括两个主要的部分:随机数生成器和分布器。随机数生成器用于生成随机数的种子,然后将其用作生成随机数的输入。随机数生成器分为线性和非线性两种。分布器用于根据所需范围内的概率分布生成随机数。

随机数生成器

C++中的随机数生成器有两种主要类型:线性和非线性。

线性随机数生成器

线性随机数生成器(LCG)是最常见的随机数生成器之一。该算法使用以下公式生成随机数: x(n+1) = (a*x(n) + c) % m。其中x是生成的随机数,a、c和m是预定义的常数。

C++中的标准线性随机数生成器是minstd_rand0和minstd_rand。

#include <random>
std::minstd_rand0 generator; // minstd_rand0的默认种子值为1
int random_number = generator(); // 生成随机数
非线性随机数生成器

非线性随机数生成器是相对于线性随机数生成器更复杂且更强大的随机数生成器。它的主要优点是,它生成的随机数更加均匀分布,并且在长时间内也不太可能生成相同的随机数。

C++中的标准非线性随机数生成器是mt19937和mt19937_64。

#include <random>
std::mt19937_64 generator; // mt19937_64的默认种子值为5489
int random_number = generator(); // 生成随机数 
分布器

C++中的随机数分布器用于根据所需范围内的概率分布生成随机数。

均匀分布器

均匀分布器将随机数分布在指定的范围内,所有可能的值都是等概率的。

#include <random>
std::mt19937_64 generator;
std::uniform_int_distribution<int> distribution(1, 6); // 均匀分布在1到6之间
int random_number = distribution(generator); // 生成随机数 
正态分布器

正态分布器根据设定的平均值和标准差,将随机数生成在正态分布的范围内。

#include <random>
std::mt19937_64 generator;
std::normal_distribution<double> distribution(0.0, 1.0); // 按平均值为0,标准差为1生成随机数
double random_number = distribution(generator); // 生成随机数
总结

C++中的随机标头是一个强大的库,可以生成不同范围内的随机数并根据概率分布生成随机数。开发人员可以根据需要选择不同的随机数生成器和分布器,并根据需要调整其参数。在使用随机数生成器时,应注意随机数的种子和分布器的参数设置,以便生成符合预期的随机数。