Операция по модулю x % c;
возвращает остаток от деления числа x
на c
.Если вы сделаете x % 10
, тогда будет 10
возможных возвращаемых значений: 0 1 2 3 4 5 6 7 8 9
.
Обратите внимание, что генерация случайных чисел с использованием rand()
с %
приводит к искаженным результатам, и эти числа распределены неравномерно.Вот простая функция в стиле C, которая генерирует случайное число из интервала от min
до max
включительно:
int irand(int min, int max) {
return ((double)rand() / ((double)RAND_MAX + 1.0)) * (max - min + 1) + min;
}
Обратите внимание, что числа, генерируемые этой функцией, распределены равномерно:
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)
cout << occurences[i] << ' ';
вывод: 14253 14481 14210 14029 14289 14503 14235
Также взгляните на:
Создать случайное число в пределах диапазона?
Создать случайные числа равномерно повесь диапазон
Каков наилучший способ генерации случайных чисел в C ++?