我有一个函数,我试图生成 18 到 5 之间的随机数
int randomAge() {
int random;
std::random_device rd;
static std::default_random_engine generator(rd()); //produce a static random engine
std::normal_distribution<double> distribution(18, 52); //random age between 18 and 52
random = distribution(generator);
return random;
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到负数和大于 52 的偶数。如何解决此问题,使其生成 18 到 52 之间的数字?
您正在使用std::normal_distributionwhich 根据正态(或高斯)随机数分布生成随机数。您正在使用此构造函数:
explicit normal_distribution( RealType mean, RealType stddev = 1.0 );
Run Code Online (Sandbox Code Playgroud)
你想要的是std::uniform_real_distribution. 请参阅参考:
产生随机浮点值 i,均匀分布在区间 [a, b)
请注意,您的引擎和发行版必须是thread_local(或static),并且随机设备可以是临时的。否则,您的结果分布不均匀。您还应该考虑获取一个随机整数而不是 double,因为int无论如何返回类型是:
#include <random>
int randomAge() {
thread_local std::mt19937 engine{ std::random_device{}() };
thread_local std::uniform_int_distribution<int> distribution{ 18, 52 };
return distribution(engine);
}
Run Code Online (Sandbox Code Playgroud)
有关的:
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |