MT19937 и нормальное распределение

Привет!
Я только начинаю кодировать на 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

Решение

Термин «нормальное распределение» не означает «регулярное распределение». Это означает нормальное распределение, как определено математикой. Это не то, что вы хотите.

То, что вы ищете, это uniform_real_distribution, который выплевывает поплавки в заданном диапазоне. Тем не менее, он делает это только на полуоткрытом диапазоне.

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

Это может вернуть 0, но никогда не вернет 30000.

Если вы хотите целые числа в закрытом диапазоне, вы можете использовать uniform_int_distribution,

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]