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