диапазон arc4random(), включая отрицательные значения

Пытаюсь найти способ форматирования вызова arc4Random() для использования диапазона чисел от -10 до 10.

Или arc4Random() генерирует только от 0 до X? Если это так, мне нужно будет манипулировать результатом arc4Random(), чтобы он мог быть результатом в указанном диапазоне?


person Demasterpl    schedule 04.03.2012    source источник
comment
полезный справочник по случайным числам в Cocoa.   -  person FluffulousChimp    schedule 04.03.2012


Ответы (1)


arc4random возвращает u_int32_t, который является беззнаковым типом. Вам нужно привести его к подписанному типу, а затем вычесть.

Я предполагаю, что вам нужно число от -10 до +10 включительно (иногда вы хотите, чтобы были выбраны и -10, и +10).

Если вы ориентируетесь на iOS 4.3 или более позднюю версию или Mac OS X 10.7 или более позднюю версию, вам следует использовать функцию arc4random_uniform:

int myNumber = (int)arc4random_uniform(21) - 10;

Если вы нацелены на более старую ОС, вы должны использовать arc4random:

int myNumber = (int)(arc4random() % 21) - 10;
person rob mayoff    schedule 04.03.2012
comment
В чем разница между arc4random и arc4random_uniform? Что означает число 21? Что обозначает число 10? - person Demasterpl; 04.03.2012
comment
Вы можете прочитать о разнице между функциями, набрав man arc4random. 21 и 10 получены из диапазона чисел, который вы указали в своем вопросе. - person rob mayoff; 04.03.2012
comment
В частности, 21 — это upperBound - lowerBound + 1, а 10 — это -lowerBound. В качестве альтернативы вы добавляете lowerBound вместо вычитания -lowerBound. В вопросе upperBound равно +10, а lowerBound равно -10. - person rob mayoff; 23.02.2016