Получение случайных чисел больше 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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