Когда вы используете arc4random
, вы избегаете одной ловушки использования %
с линейными конгруэнтными генераторами (что является обычным алгоритмом, используемым rand
): младшие биты не менее случайны.
Однако у вас все еще есть проблемы с усечением: то есть, поскольку (1 << 32) % 83
равно 77, это означает, что числа между 0 и 76 появляются (немного) чаще, чем числа между 77 и 82. Чтобы избежать этого, вы должны выбросить входящиезначение (т. е. снова вызвать arc4random
), если оно выше (1 << 32) / 83 * 83
.
(я предполагаю, что диапазон arc4random
составляет от 0 до 2 32 -1.объяснение соответственно.)