Получение случайных чисел больше RAND_MAXC++

Программы на C++. Форум разработчиков
Anonymous
Получение случайных чисел больше RAND_MAX

Сообщение Anonymous »

Вопрос 7–9 из Accelerated C++ Эндрю Кенига спрашивает:


7-9. (сложно) Реализация nrand в §7.4.4/135 не будет
работать для аргументов, превышающих RAND_MAX. Обычно это ограничение
не представляет проблемы, поскольку RAND_MAX в любом случае часто является максимально возможным целым числом
. Тем не менее, существуют реализации, в которых RAND_MAX
намного меньше максимально возможного целого числа. Например,
нередко бывает, что RAND_MAX равен 32767 (2^15 -1), а максимальное
возможное целое число - 2147483647 (2^31 -1). Переопределите nrand так, чтобы
он хорошо работал для всех значений n.


Если n > RAN_MAX мои мысли придется принять

Код: Выделить всё

double temp = n/RAN_MAX + .5;
int mult = temp;
int randomNum = 0;

for (int i = 0; i != mult; mult++)
randomNum += rand();
затем проверьте, является ли randomNum < n. Будет ли это работать для генерации случайного числа > RAND_MAX? Я не знаю, как использовать целые числа большего размера, чем может обрабатывать мой компьютер, поэтому не думаю, что есть какой-либо реальный способ это определить.

Подробнее здесь: https://stackoverflow.com/questions/214 ... n-rand-max

Вернуться в «C++»