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吗?
答案 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
。