Как часто мне следует вызывать srand () в приложении C ++? - PullRequest
11 голосов
/ 05 августа 2011

У меня есть приложение на C ++, которое вызывает rand () в разных местах. Нужно ли регулярно инициализировать srand(), чтобы убедиться, что rand () является достаточно случайным, или достаточно вызвать его один раз при запуске приложения?

Ответы [ 4 ]

16 голосов
/ 05 августа 2011

Если у вас только одна нить, начните один раз . Если вы часто перезаряжаете, вы можете нарушить некоторые статистические свойства случайных чисел. Если у вас несколько потоков, вообще не используйте rand, а скорее что-нибудь поточно-безопасное, например drand48_r, что позволяет вам поддерживать состояние для каждого потока (так что вы можете заполнять один раз для потока).

4 голосов
/ 05 августа 2011

Только один раз, в начале вашего приложения.

4 голосов
/ 05 августа 2011

Нет, просто позвонить один раз - это хорошо.Используйте начальное значение, чтобы случайная последовательность была одинаковой при каждом выполнении.Это может быть полезно при создании (например) детерминированного поведения игры при ее воспроизведении для отладки.

3 голосов
/ 05 августа 2011

позвоните один раз, когда приложение запустится

...