Подтвердить что ты не робот

Как выбрать диапазон значений при использовании arc4random()

Можно ли задать диапазон чисел при использовании arc4random()? Например, только 50-100.

4b9b3361

Ответ 1

Как указано в других сообщениях ниже, лучше использовать arc4random_uniform. (Когда этот ответ был изначально записан, arc4random_uniform не был доступен). Кроме того, чтобы избежать смещения по модулю arc4random() % x, он также избегает проблемы с посевом с arc4random при рекурсивном использовании в короткие временные рамки.

arc4random_uniform(4)

будет генерировать 0, 1, 2 или 3. Таким образом, вы можете использовать:

arc4random_uniform(51)

и просто добавьте 50 к результату, чтобы получить диапазон от 50 до 100 (включительно).

Ответ 2

Чтобы развернуть комментарий JohnK.

Предлагается использовать следующую функцию для возврата случайного числа в диапазоне:

arc4random_uniform(51)

который вернет случайное число в диапазоне от 0 до 50.

Затем вы можете добавить свои нижние оценки к этому, например:

arc4random_uniform(51) + 50

который вернет случайное число в диапазоне от 50 до 100.

Причина, по которой мы используем arc4random_uniform(51) над arc4random() % 51, заключается в том, чтобы избежать погрешности по модулю. Это выделяется на странице руководства следующим образом:

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

Короче вы получаете более равномерно распределенное случайное число.

Ответ 3

int fromNumber = 10;
int toNumber = 30;
int randomNumber = (arc4random()%(toNumber-fromNumber))+fromNumber;

Будет генерировать randon number между 10 и 30, т.е. 11,12,13,14......29

Ответ 4

Вы можете использовать этот код для генерации случайных значений с диапазоном:

//range from 50 to 100
int num1 = (arc4random() % 50) + 50; or
int num1 = arc4random_uniform(50) + 50;

//range from 0-100
int num1 = arc4random() % 100; or
int num1 = arc4random_uniform(100);

Ответ 5

В Swift вы можете использовать это (вдохновленный ответом @Justyn)

func generateRandomKey(fromRange rangeFrom:Int, toRange rangeTo:Int) -> Int{

    let theKey = arc4random_uniform(UInt32(rangeTo - rangeFrom)) +  UInt32(rangeFrom)
    return Int(theKey)
}

Всегда дает вам случайный диапазон Integer.

Ответ 6

Во многих ситуациях от 10 до 30 будет включать в себя включительно (включает 10 и 30)...

int fromNumber = 10;
int toNumber = 30;
toNumber ++;
int randomNumber = (arc4random()%(toNumber-fromNumber))+fromNumber;

Обратите внимание на разницу с номером - fromNumber теперь составляет 21... (20 + 1), что дает возможные результаты от 0 до 20 (включительно), которые при добавлении из числа (10) приводят к 10-му до 30 (включительно).