Вы можете сделать
cout << rawRand % 100 << endl; // Outputs between 0 and 99
cout << rawRand % 101 << endl; // outputs between 0 and 100
Для людей, понижающих голосование;обратите внимание, что через минуту после того, как это было первоначально опубликовано, я оставил комментарий:
From http://www.cplusplus.com/reference/clibrary/cstdlib/rand "Обратите внимание, что эта операция по модулю не генерирует действительно равномерно распределенное случайное число в промежутке (так какв большинстве случаев более низкие значения немного более вероятны), но это, как правило, хорошее приближение для коротких отрезков ».
С 64-битными целыми числами и с использованием 100 чисел в качестве выходных данных числа 0-16 представлены с 1.00000000000000000455% чисел (относительная точность к одинаково распределенному 1% примерно на 10 -18 ), в то время как цифры 17-99 представлены 0,999999999999999999913% от числа.Да, не идеально распределено, но очень хорошее приближение для небольших промежутков.
Также обратите внимание, где ОП запрашивает идентично распределенные числа?Мы знаем, что они используются в целях, где небольшие отклонения не имеют значения (например, что-либо кроме криптографии - и если они используют числа для криптографии, этот вопрос слишком наивен, чтобы они могли писать свою собственную криптографию).).
РЕДАКТИРОВАТЬ - Для людей, которые действительно заинтересованы в равномерном распределении случайных чисел, работает следующий код.Обратите внимание, что это не обязательно оптимально, так как для 64-битных случайных чисел требуется два вызова rand()
один раз каждые 10 ^ 18 вызовов.
unsigned N = 100; // want numbers 0-99
unsigned long randTruncation = (RAND_MAX / N) * N;
// include every number the N times by ensuring rawRand is between 0 and randTruncation - 1 or regenerate.
unsigned long rawRand = rand();
while (rawRand >= randTruncation) {
rawRand = rand();
// with 64-bit int and range of 0-99 will need to generate two random numbers
// about 1 in every (2^63)/16 ~ 10^18 times (1 million million times)
// with 32-bit int and range of 0-99 will need to generate two random numbers
// once every 46 million times.
}
cout << rawRand % N << stdl::endl;