Генератор случайных чисел не работает - PullRequest
3 голосов
/ 25 сентября 2010

Я использую эту функцию для создания случайных чисел от 100000000 до 999999999

int irand(int start, int stop) {
  double range = stop - start + 1;
  return start + (int)(range * rand()/(RAND_MAX+1.0));
}

Когда я так его использую, он нормально работает

while(1) {
    DWORD dw = irand(100000000, 999999999);
    printf("dynamic key: %d\n", dw);
    Sleep(100);
}

Но когда я использую эту функцию без while (1), я всегда получаю одно и то же число. Что мне нужно исправить?

Ответы [ 2 ]

3 голосов
/ 25 сентября 2010

Генератор случайных чисел должен быть заполнен каким-то источником энтропии, чтобы вы каждый раз видели разные последовательности, в противном случае начальная начальная величина 1 используется функцией rand.В вашем случае вызов srand (time(NULL)); один раз перед первым вызовом функции irand должен помочь.Вам может пригодиться этот вопрос: почему я всегда получаю одинаковую последовательность случайных чисел с помощью rand ()?

1 голос
/ 25 сентября 2010

Не прямой ответ на ваш вопрос, но то, что вы, вероятно, должны прочитать, если вы боретесь со случайными числами. Эта недавняя статья нашего собственного Джона Скита - хорошее введение в случайные числа, и можно столкнуться со следующими хитростями: http://csharpindepth.com/Articles/Chapter12/Random.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...