Ваша структура неверна, и вы не смогли правильно использовать normal_distribution
(вообще, вообще-то).
#include <random>
#include <iostream>
#include <algorithm>
int main() {
int n = 10000;
int mean = 1000;
float stdev = 100;
int maxNum = 1100;
int minNum = 900;
int count = 0;
int number;
int min = std::min(maxNum, minNum);
int max = std::max(maxNum, minNum);
std::default_random_engine randEng;
randEng.seed(10);
std::normal_distribution<>normal(mean, stdev);
for (int i = 0; i < n; i++) {
number = static_cast<int>(normal(randEng));
if (number >= min && number <= max)
++count;
}
std::cout << "There are " << count << " numbers between " << min << " and " << max << " in the distribution\n";
std::cin.get();
return 0;
}
Вывод
There are 6867 numbers between 900 and 1100 in the distribution
Чем шире вы делаете это распределение, тем больше чисел попадет в него. Обратите внимание на использование объекта распределения по согласованию с генератором:
number = static_cast<int>(normal(randEng));
И также обратите внимание, что накопление count
равно внутри генератора l oop, в отличие от вашего трижды. обновлен код, который имеет вне l oop и, таким образом, выполняется только один раз.