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