Что случилось с этим рандомизируют функцию?

Пред - и События Постсборки, выполненные как сценарий пакетной обработки. Можно сделать условный оператор по телефону $(ConfigurationName).

, Например

if $(ConfigurationName) == Debug xcopy something somewhere
5
задан Thanks 15 July 2009 в 12:29
поделиться

4 ответа

The manual page for arc4random indicates that the returned value can be anywhere in the range valid for u int32 (i.e. 0 to (2**32)-1). This means you'll want to divide by 0xFFFFFFFF, instead of RAND_MAX, which I would imagine is less (it is library dependant however, so you'll have to check exactly what it is).

Your function should thus become:

- (float)randomValueBetween:(float)low andValue:(float)high {
    return (((float) arc4random() / 0xFFFFFFFFu) * (high - low)) + low;
}
7
ответ дан 18 December 2019 в 10:48
поделиться
  • arc4random returns a pseudo-random value from zero to (2 ^ 32 - 1)
  • RAND_MAX has a default value of (2 ^ 31 - 1)

So the function is probably multiplying the (high - low) range by up to a factor of 2, for random values in the range 0 - 800.

6
ответ дан 18 December 2019 в 10:48
поделиться

Более простой вариант:

- (float)randomValueBetween:(float)low andValue:(float)high {
    return (arc4random() % * (high - low)) + low;
}

Поскольку вы уже выполняете операцию модификации, почему бы не сделать это непосредственно в интересующем диапазоне?

Кроме того, почему вы передаете поплавки (и возвращение числа с плавающей запятой), если вы передаете только круглые числа? Целые числа более эффективны.

0
ответ дан 18 December 2019 в 10:48
поделиться

On the iPhone, RAND_MAX is 0x7fffffff (2147483647), while arc4random() will return a maximum value of 0x100000000, so (4294967296) / (2147483647) = 2..... 2 * (400-0) + 0 = 800 ! the max value the method can return

3
ответ дан 18 December 2019 в 10:48
поделиться