Должен ли я использовать случайный движок, посеянный из std :: random_device или использовать std :: random_device каждый раз
У меня есть класс, который содержит два источника случайности.
std::random_device rd;
std::mt19937 random_engine;
Я сеюstd::mt19937
с призывом кstd::random_device
, Если я хочу сгенерировать номер и мне не нужны повторяемость, позвонить ли мнеrd()
или жеrandom_engine()
?
В моем конкретном случае, я уверен, что оба будут работать нормально, потому что это будет вызываться в некотором сетевом коде, где производительность не на высоте, а результаты не особенно чувствительны. Однако меня интересуют некоторые «правила большого пальца» о том, когда использовать аппаратную энтропию и когда использовать псевдослучайные числа.
В настоящее время я использую толькоstd::random_device
посеять моиstd::mt19937
двигатель, и любое случайное число, необходимое для моей программы, я используюstd::mt19937
двигатель.
edit: вот объяснение, для чего именно я использую этот конкретный пример:
Это для игровой программы. Эта конкретная игра позволяет пользователю настраивать свою «команду»; до начала раунда против оппонента. Частью настройки битвы является отправка команды на сервер. Моя программа имеет несколько команд и использует случайное число, чтобы определить, какую команду загрузить. Каждая новая битва призываетstd::random_device
для заполнения генератора псевдослучайных чисел. Я регистрирую начальное состояние битвы, которое включает эту команду, которую я выбрал случайным образом, и начальное семя.
Конкретное случайное число, о котором я спрашиваю в этом вопросе, относится к случайному выбору команды (когда полезно, чтобы оппонент заранее не знал, какую команду я использую, но не критическую), но что я делаю; я действительно ищу это правило. Это нормально всегда использоватьstd::random_device
если мне не нужна повторяемость моих чисел, или существует реальный риск использования энтропии быстрее, чем ее можно собрать?