C++实现[0,1]之间的正态发布函数,获得的值要在0到1之间
时间: 2024-02-21 07:00:04 浏览: 13
可以使用 Box-Muller 转换算法来生成服从正态分布的随机数,然后将其归一化到 [0, 1] 的范围内。
以下是一个 C++ 实现,使用了标准库中的 random 和 cmath 头文件:
```c++
#include <iostream>
#include <random>
#include <cmath>
using namespace std;
// 生成服从正态分布的随机数,均值为 mean,标准差为 stddev
double normal_distribution(double mean, double stddev)
{
static default_random_engine generator;
normal_distribution<double> distribution(mean, stddev);
double r;
do {
r = distribution(generator);
} while (r < 0.0 || r > 1.0); // 要求生成的值在 [0, 1] 范围内
return r;
}
int main()
{
// 生成 10 个服从正态分布的随机数
for (int i = 0; i < 10; i++) {
double r = normal_distribution(0.5, 0.1); // 均值 0.5,标准差 0.1
cout << r << endl;
}
return 0;
}
```
该程序使用了 C++11 新增的随机数库,通过 normal_distribution 类生成服从正态分布的随机数。在生成随机数时,使用 do-while 循环,确保生成的值在 [0, 1] 范围内。