mt19937和正态分布

时间:2017-05-13 17:50:44

标签: c++ random normal-distribution mt19937

Helo那里! 我刚刚开始用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吗?

1 个答案:

答案 0 :(得分:4)

术语&#34;正态分布&#34;并不意味着定期分发&#34;。它意味着normal distribution,由数学定义。那不是你想要的。

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

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

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

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