Моя домашняя работа заключается в создании случайных целых чисел от 0
до 2^30
.Теперь, в прошлом мы узнали, что rand()
возвращает только целые числа до RAND_MAX
, что это меньше, чем UINT_MAX
, и что мы можем использовать битовое смещение, чтобы заполнить эту емкость UINT_MAX
.Из некоторого чтения, которое я сделал (здесь, на SO), я понимаю, что это может быть не очень хорошей идеей, если распределение этих чисел имеет значение для меня.Сказав это, мой профессор определил этот метод.
Мой вопрос, на сколько сдвинуть бит?Будет ли разница между RAND_MAX
и UINT_MAX
всегда такой, чтобы существовала безопасная константа для сдвига битов?Или есть какое-то начальное исследование, которое необходимо выполнить, чтобы определить число, на которое нужно сдвинуть бит?Должен ли я просто немного сдвигать биты и проверять по UINT_MAX
?
Причина, по которой я спрашиваю, состоит в том, что UINT_MAX
определено как минимум определенное число (65535
), но намоя машина UINT_MAX
намного больше (4294967295
).Это беспокоило меня, что я могу закончить свою домашнюю работу в выходные, прийти в школу и обнаружить, что все не работает достаточно хорошо, чтобы отправить.
Спасибо!
Ссылки:
Я прочитал пару похожих вопросов, но не смог получить от них ответа.
Значение RAND_MAX
всегда (2^n)-1
?
, генерирующее случайное число в диапазоне от 0
до n
, где n
может быть > RAND_MAX
На самом деле, второй вопрос выше заставляет меня задуматься о том, стоит ли вообще это делать?