Я услышал только хорошие вещи [приблизительно 110] ReSharper. Это идет, мой к - изучает список.
Скорее всего, вам повезет больше с arc4random ()
, вам не нужно явно указывать его, и он кажется «лучшим» случайным.
В делегате вашего приложения:
- (void) applicationDidFinishLaunching:(UIApplication *)application
{
srandom(time(NULL));
// ...
for (int i = 0; i < 100; i++) {
NSLog(@"%d", random());
}
}
Причина, по которой это работает, заключается в том, что генераторы псевдослучайных чисел требуют начального или начального значения. Используя время, вы с большей вероятностью получите разные последовательности «случайных» чисел при каждом выполнении.
Если вы не укажете начальное значение, одно и то же начальное значение будет использоваться при каждом выполнении, что дает одинаковую последовательность. Обычно это нежелательное поведение, но в некоторых случаях полезно иметь возможность генерировать одну и ту же последовательность, например, для алгоритмов тестирования.
В большинстве случаев вам нужно указать начальное значение, которое будет изменяться между запусками, здесь и пригодится текущее время.
Для новичков, которые натолкнулись на это сообщение:
Функция random ()
создает псевдослучайную последовательность . random ()
способами дает вам одну и ту же псевдослучайную последовательность каждый раз, когда вы ее используете. Вам нужно «засеять» последовательность, чтобы выбрать другую начальную точку, чтобы при каждом запуске она выглядела по-разному. Вы можете использовать системное время для заполнения (srandom (time (NULL))
или использовать вспомогательную функцию srandomdev ()
.
Чтобы поэкспериментировать, попробуйте:
#include "stdio.h"
int main(void) {
int i;
for (i = 0; i < 10; i++)
printf("%d\n", random());
return 0;
}
Вы всегда получаю одну и ту же последовательность, на моем компьютере это дает:
1804289383
846930886
1681692777
1714636915
1957747793
424238335
719885386
1649760492
596516649
1189641421
Дополнительная литература:
man random
из Терминала.) Не забывайте, что вам нужно заполнить генератор случайных чисел с помощью srandom перед его использованием с изменяющимся значением, таким как текущее время.
Сначала вызовите srandomdev ().
srandomdev ();
long my_rand = random ();
Используйте случайное число (или его эквивалент для выбранной вами функции случайного числа), но также используйте условные выражения вокруг него, чтобы при отладке все всегда происходило одинаково. Я также склонен ставить предупреждения NSLog, когда делаю подобные вещи, поэтому я не отправляю мертвый код.
#if DEBUG==0
srandom(time(NULL));
#else
NSLog(@"Debug build: Random numbers are not random!");
#endif
или
if(!debuggingBuild)
srandom(time(NULL));
else
NSLog(@"Debug build: Random numbers are not random!");
arc4random будет лучшим решением, чем rand() или random(). See this.