Один общий способ выбора случайного числа в [0, n) - взять результат rand()
по модулю n: rand() % n
. Однако, даже если результаты, возвращаемые доступной реализацией rand()
, полностью однородны, не должно быть проблемы с равномерностью полученных [0, n) чисел, когда RAND_MAX + 1
не делит равномерно на n? Например. предположим, что RAND_MAX
равно 2, а n равно 2. Тогда из 3 возможных выходов rand()
: 0, 1 и 2 мы получаем 0, 1 и 0 соответственно, когда мы используем их по модулю n. Поэтому выход не будет равномерным.
Это реальная проблема на практике? Каков наилучший способ выбора случайных чисел в [0, n), равномерно получаемых из вывода rand()
, предпочтительно без какой-либо арифметики с плавающей запятой?