Неудобные результаты arc4random - PullRequest
3 голосов
/ 03 января 2012

Я использую этот код, где значение 'length' равно '50'.

newX = (arc4random()%(lenght+1)) - (lenght/2);
newY = (arc4random()%(lenght+1)) - (lenght/2);
NSLog(@"Creature Move X:%f, Y:%f", newX, newY);

Но в отладчике я получаю такие вещи:

2012-01-02 21:10:50.794 Kipos[28833:207] Creature Move X:4294967296.000000, Y:4294967296.000000
2012-01-02 21:10:50.896 Kipos[28833:207] Creature Move X:4294967296.000000, Y:12.000000

Что происходит?

newX и newY являются числами с плавающей запятой:

float newX;
float newY;

1 Ответ

5 голосов
/ 03 января 2012

arc4random возвращает без знака int (и, вероятно, length также без знака).Измените ваш код, например, на

newX = (float)((int)(arc4random() % (length + 1))) - (length / 2));

, чтобы избежать переполнения при вычитании.

Обратите внимание, что я также добавил явное приведение типа float для результата, что не является строго необходимым, но этоделает код немного более понятным.

...