c++ 如何生成高效高质量的随机数
时间: 2023-07-31 09:11:17 浏览: 269
要在 C++ 中生成高效高质量的随机数,可以使用以下步骤:
1. 使用 C++11 引入的随机数库:C++11 引入了一个更好的随机数库,其中包括了更高质量的随机数生成器和分布函数。这些库位于 `<random>` 头文件中。
2. 使用适当的随机数生成器:`std::mt19937_64` 是一个优秀的伪随机数生成器,使用 Mersenne Twister 算法,可以生成高质量的伪随机数。它的周期非常长,可以满足大多数应用场景。
3. 初始化随机数生成器:使用不同的种子来初始化随机数生成器,可以产生不同的随机序列。可以使用 `std::random_device` 来获得真正的随机种子,或者使用时间戳、进程 ID 等值作为种子。
4. 使用适当的分布函数:根据需求选择合适的分布函数来生成随机数。常见的分布函数包括均匀分布 (`std::uniform_int_distribution`、`std::uniform_real_distribution`)、正态分布 (`std::normal_distribution`)、泊松分布 (`std::poisson_distribution`) 等。
5. 避免频繁初始化随机数生成器:初始化随机数生成器是一个相对较耗时的操作,尽量避免在循环中频繁初始化生成器。如果需要多次生成随机数,可以将生成器对象放在循环外,并重复使用。
下面是一个示例代码:
```cpp
#include <iostream>
#include <random>
int main() {
std::random_device rd;
std::mt19937_64 rng(rd());
std::uniform_int_distribution<int> dist(1, 10);
for (int i = 0; i < 10; ++i) {
int random_number = dist(rng);
std::cout << "随机数为:" << random_number << std::endl;
}
return 0;
}
```
在上述示例中,我们使用 `std::random_device` 获得一个真正的随机种子,并将其传递给 `std::mt19937_64` 初始化随机数生成器。然后,使用 `std::uniform_int_distribution` 定义了一个范围为1-10的均匀分布,并使用 `rng` 生成随机数。我们循环生成了10个随机数,并打印结果。
记住,要生成高效高质量的随机数,最好使用 C++11 引入的随机数库,并遵循上述步骤来选择适当的随机数生成器和分布函数。
阅读全文