gpt4 book ai didi

C++ - 在范围内生成遵循正态分布的随机数

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:01:51 32 4
gpt4 key购买 nike

我需要生成服从正态分布的随机数,该分布应位于 1000 和 11000 的区间内,平均值为 7000。我想使用 c++11 library function但我不明白如何在间隔内生成数字。有人可以帮忙吗?

最佳答案

您没有指定标准偏差。假设给定间隔的标准偏差为 2000,您可以尝试这样做:

#include <iostream>
#include <random>

class Generator {
std::default_random_engine generator;
std::normal_distribution<double> distribution;
double min;
double max;
public:
Generator(double mean, double stddev, double min, double max):
distribution(mean, stddev), min(min), max(max)
{}

double operator ()() {
while (true) {
double number = this->distribution(generator);
if (number >= this->min && number <= this->max)
return number;
}
}
};

int main() {
Generator g(7000.0, 2000.0, 1000.0, 11000.0);
for (int i = 0; i < 10; i++)
std::cout << g() << std::endl;
}

可能的输出:

4520.53
6185.06
10224
7799.54
9765.6
7104.64
5191.71
10741.3
3679.14
5623.84

如果您只想指定minmax 值,那么我们可以假设平均值为(min + max)/2。我们还可以假设 minmax 与平均值相差 3 个标准差。通过这些设置,我们将仅丢弃 0.3% 的生成值。所以你可以添加以下构造函数:

Generator(double min, double max):
distribution((min + max) / 2, (max - min) / 6), min(min), max(max)
{}

并将生成器初始化为:

Generator g(1000.0, 11000.0);

关于C++ - 在范围内生成遵循正态分布的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28618900/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com