Моя домашняя работа включает в себя создание случайных целых чисел между 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
На самом деле, второй вопрос выше заставляет меня усомниться в целесообразности этого вообще?