Можно ли задать диапазон чисел при использовании arc4random()? Например, только 50-100.
Как выбрать диапазон значений при использовании arc4random()
Ответ 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 (включительно).