Как часто мне следует вызывать srand() в приложении C++?

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

4 ответа

Решение

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

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

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

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

Другие вопросы по тегам