Есть много проблем, связанных с попыткой сгенерировать действительно случайное число. Обратите внимание, например, что такие функции, как rand () и random () генерируют последовательности чисел на основе «начального значения». Это означает, что если начальное значение одинаково, последовательность сгенерированных чисел будет одинаковой. Существуют различные способы использования «случайных» начальных чисел, т. Е. С использованием текущей даты и времени, но надежность и безопасность этих методов сомнительны.
По мере развития генераторов чисел эти проблемы решаются, и поэтому более поздние генераторы обычно лучше, чем более ранние: rand обычно не так случайны, как random , и random не так случайно, как arc4random .
Текущая проблема с arc4random () , которая задокументирована на их страницах руководства, состоит в том, что использование вычисления модуля - как в "arc4random ()% UPPER_LIMIT" - может привести к статистическому смещению, если UPPER_LIMIT не четное число. По этой причине в семейство arc4random была добавлена новая функция под названием arc4random_uniform . Он генерирует равномерно распределенные случайные числа независимо от верхнего предела, и его довольно просто использовать.
Используя ваш пример выше, я бы порекомендовал вам попробовать сгенерировать ваше случайное число, например так:
int value = low_bound + arc4random_uniform(width + 1);