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