Xcode arc4random () не работает должным образом - PullRequest
1 голос
/ 14 января 2012

У меня есть следующие входные данные (проверено NSLog): xleft = 128, xRight = 192.В следующей строке кода используются эти-

xPos = (arc4random() % xRight-xleft) + xleft;

. При последнем запуске xPos = 53. По моим расчетам, должно быть не менее 128, если полученное случайное число равно нулю (192 - 128 = 64, rand(64) = 0, 0 + 128 = 128.Я пытаюсь сгенерировать случайные числа в диапазоне от xLeft до xRight.

Ответы [ 2 ]

2 голосов
/ 14 января 2012

% имеет более высокий приоритет в C и в таких языках, как Objective-C, чем + и -. Это равно * и /.

Так что выражение оценивается как:

  1. Get arc4random
  2. Получите модуль этого и xRight
  3. Вычесть xLeft
  4. Добавить xLeft

Так что вы должны ожидать что-нибудь в диапазоне [0, xRight)

2 голосов
/ 14 января 2012

Попробуйте:

xPos = (arc4random() % (xRight-xleft)) + xleft; 

По сути, вы моддируете с помощью xRIght, а затем вычитаете xleft вместо того, чтобы сначала вычитать xleft из xright и моддировать с результатом.

Ссылка: http://www.techotopia.com/index.php/Objective-C_2.0_Operator_Precedence

...