Привет!
Я только начинаю кодировать на 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?
Термин «нормальное распределение» не означает «регулярное распределение». Это означает нормальное распределение, как определено математикой. Это не то, что вы хотите.
То, что вы ищете, это uniform_real_distribution
, который выплевывает поплавки в заданном диапазоне. Тем не менее, он делает это только на полуоткрытом диапазоне.
std::uniform_real_distribution<double> distribution(0, 30000);
double temp=distribution(rng);
Это может вернуть 0, но никогда не вернет 30000.
Если вы хотите целые числа в закрытом диапазоне, вы можете использовать uniform_int_distribution
,
Других решений пока нет …