Должен ли я использовать случайный движок, посеянный из 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 если мне не нужна повторяемость моих чисел, или существует реальный риск использования энтропии быстрее, чем ее можно собрать?

Ответы на вопрос(6)

Ваш ответ на вопрос