Случайные числа в Objective-C, используя мод диапазон? - PullRequest
2 голосов
/ 13 июля 2010

Я прочитал здесь - без особого понимания - что плохо использовать диапазон модов.Так что эта типичная рекомендация для Objective-C

int r = arc4random() % 45;

может быть плохой идеей, чтобы получить число от 0 до 45 (что-то о распределении и этой формуле, имеющей предпочтение для младших битов).Что следует использовать в Objective-C?




Я так рад, что смогу наконец изучить этот материал после использования только языков высокого уровня (Java et. Al) все это время.Завтра я попытаюсь развести огонь двумя ветками.

1 Ответ

1 голос
/ 13 июля 2010

Java находится на таком же высоком уровне, как Objecive C, здесь - в этом случае Java 'Random.getInt () - это то же самое, что и arc4random, поскольку они оба возвращают 32-битное псевдослучайное число.

Проблема, поднятая в URL (и я видел в других местах), заключается в том, что rand ()

может повторяться каждые 32768 значений.

, тогда как OSX arc4random может иметь (2 ** 1700) состояний.

Но, как и при любом использовании псевдослучайных генераторов, вам необходимо знать об их слабых сторонах, прежде чем использовать их, например, предпочтение младших битов в некоторых генераторах, а такжекомментарий на странице руководства openBSD arc4random , где говорится, что

arc4random_uniform () рекомендуется для конструкций типа `` arc4random ()% upper_bound '', так как он избегает "смещения по модулю"когда верхняя граница не является степенью двойки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...