C++ - 随机数 正态分布
时间: 2023-12-10 21:31:58 浏览: 108
在 C++ 中,可以使用 <random> 头文件中的 normal_distribution 类来生成正态分布的随机数。具体实现代码如下:
```c++
#include <iostream>
#include <random>
int main() {
std::random_device rd;
std::mt19937 gen(rd());
std::normal_distribution<> dis(0, 1); // 均值为 0,标准差为 1 的正态分布
for (int i = 0; i < 10; ++i) {
std::cout << dis(gen) << ' ';
}
std::cout << '\n';
return 0;
}
```
上述代码中,首先使用 `std::random_device` 来获取一个随机数种子,然后使用 `std::mt19937` 引擎来生成随机数。最后使用 `std::normal_distribution` 类来定义正态分布的参数,其中第一个参数是均值,第二个参数是标准差。调用 `dis(gen)` 即可生成一个符合正态分布的随机数。
相关问题
C++生成呈正态分布的随机数据
在C++中,可以使用C++11标准库中的 `<random>` 头文件来生成呈正态分布的随机数据。具体实现步骤如下:
1. 引入 `<random>` 头文件和 `<vector>` 头文件。
2. 创建一个 `std::default_random_engine` 引擎对象和一个 `std::normal_distribution` 分布对象。
3. 使用引擎对象和分布对象生成随机数。
4. 将生成的随机数存储在 `std::vector` 容器中。
下面是一个示例代码:
```cpp
#include <iostream>
#include <random>
#include <vector>
int main() {
// 创建随机数引擎对象和正态分布分布对象
std::default_random_engine generator;
std::normal_distribution<double> distribution(0.0, 1.0);
std::vector<double> random_values;
// 生成随机数
for (int i = 0; i < 1000; i++) {
double random_value = distribution(generator);
random_values.push_back(random_value);
}
// 输出随机数
for (double value : random_values) {
std::cout << value << " ";
}
return 0;
}
```
在上面的代码中,我们创建了一个均值为0,标准差为1的正态分布分布对象。然后使用 `std::default_random_engine` 引擎对象 `generator` 和正态分布分布对象 `distribution` 生成随机数。最后,我们将生成的随机数存储在 `std::vector` 容器中,并输出这些随机数。
需要注意的是,我们使用的是默认的随机数引擎对象 `std::default_random_engine`,这个引擎对象的随机性可能不足以满足一些高安全性的应用。在这种情况下,我们可以使用更加安全的引擎对象,比如 `std::mt19937` 引擎。
C++ rand 正态分布
以下是使用C++实现正态随机分布的方法:
方法一:使用C++标准库中的random库和normal_distribution类来生成正态分布的随机数。
```cpp
#include <iostream>
#include <random>
int main() {
std::random_device rd;
std::mt19937 gen(rd());
std::normal_distribution<> dist(0, 1); // 均值为0,标准差为1的正态分布
for (int i = 0; i < 10; ++i) {
std::cout << dist(gen) << std::endl;
}
return 0;
}
```
方法二:使用C++ Boost库中的random库和normal_distribution类来生成正态分布的随机数。
```cpp
#include <iostream>
#include <boost/random.hpp>
int main() {
boost::random::mt19937 gen;
boost::random::normal_distribution<> dist(0, 1); // 均值为0,标准差为1的正态分布
for (int i = 0; i < 10; ++i) {
std::cout << dist(gen) << std::endl;
}
return 0;
}
```
阅读全文