2015-09-20 2 views
0

Я хочу узнать, почему мой код не работает, как я ожидаю. Я имею в виду, что я хочу сгенерировать двойной номер между 0 и 1, и я узнал, что когда я использую (двойной) rand()/RAND_MAX, он работает хорошо. Однако я прочитал, что srand (time (NULL)) изменяет каждое сгенерированное случайное число каждый раз при компиляции. Однако, когда я использую их вместе, программа генерирует одинаковое случайное число все время. Почему это происходит? Благодарю.Генератор случайных чисел путает с функцией srand

Вот мой код:

//srand(time(NULL)); 
number = (double)rand()/(double)RAND_MAX; 

ответ

0

srand() функция инициализирует генератор псевдослучайных чисел. Вы можете думать об этом, как будто он указывает на rand() номер, чтобы начать его «вычисления». Каждый раз, когда вы компилируете и запускаете свою программу, функция srand() дает вашей функции rand() семя time(NULL) (что, кстати, очень большое число меняется каждую секунду). Если вы не используете srand(), ваш rand() всегда будет возвращать одну и ту же последовательность чисел, потому что по умолчанию задано стандартное неизменяемое семя (номер для запуска «вычислений»). Вы можете попытаться дать вашему srand() статический параметр, например: srand(1500). Вы увидите, что он будет возвращать разные числа, но их последовательность будет снова одинаковой при каждом компиляции и запуске.

Для получения дополнительной информации читайте здесь:

http://www.cplusplus.com/reference/cstdlib/srand/

http://www.cplusplus.com/reference/cstdlib/rand/

Смежные вопросы