0

你好!我刚开始用 C++ 编写代码,我不确定如何正确使用随机数生成器。例如,我需要 [0,30000] 范围内的数字,如何确保我不会只从我的范围内获得小数字。我的功能:

std::random_device rd;
std::mt19937 rng(rd());
int myRand(int i) {
    std::normal_distribution<double> distribution(30, 1500);
    double temp=distribution(rng);
    if(temp<0){
        temp*=(-1);
    }
    return (int) std::round(temp)%i;
}

您介意帮我正确配置 normal_distribution 吗?

4

1 回答 1

4

术语“正态分布”并不意味着“正则分布”。它意味着一个正态分布,正如数学所定义的那样。那不是你想要的。

您正在寻找的是 a uniform_real_distribution,它会在给定范围内吐出浮点数。但是,它仅在半开范围内执行此操作。

std::uniform_real_distribution<double> distribution(0, 30000);
double temp=distribution(rng);

这可能返回 0,但永远不会返回 30000。

如果你想要一个封闭范围内的整数,你可以使用uniform_int_distribution.

于 2017-05-13T18:01:28.547 回答