Если и только если:
вы не ищете "идеальную однородность" или
у вас естьнет поддержки C ++ 11 и даже TR1 (таким образом, у вас нет другого выбора)
затем вы можете рассмотреть возможность использования следующего решения в стиле C,который (ради репутации этого сообщества ~ см. rand () Считается вредным ) написан зачеркнутым шрифтом:
Вот простая функция в стиле C, которая генерирует случайное числоот интервала от min
до max
включительно.Эти цифры кажутся очень близкими к равномерному распределению.
int irand(int min, int max) {
return ((double)rand() / ((double)RAND_MAX + 1.0)) * (max - min + 1) + min;
}
и не забудьте позвонить srand
, прежде чем использовать его:
int occurences[8] = {0};
srand(time(0));
for (int i = 0; i < 100000; ++i)
++occurences[irand(1,7)];
for (int i = 1; i <= 7; ++i)
printf("%d ", occurences[i]);
вывод: 14253 14481 14210 14029 14289 14503 14235
Также взгляните на:
Создать случайное число в пределах диапазона?
Создать случайные числа равномернопо всему диапазону
, найдите время и посмотрите хотя бы первые 11 минут вышеупомянутого видео
В противном случае:
используйте <random>
точно так же, как это было указано Kerrek SB уже.