Должен ли я использовать случайный движок, засеянный из стандартного ::случайного _устройства, или использовать стандартное ::случайное _устройство каждый раз

У меня есть класс, который содержит два источника случайности.

std::random_device rd;
std::mt19937 random_engine;

Я задаю std::mt19937вызовом std::random_device. Если я хочу сгенерировать число и меня не волнует повторяемость, следует ли мне звонить rd()или random_engine()?

В моем конкретном случае я уверен, что оба будут работать нормально, потому что это будет вызываться в каком-то сетевом коде, где производительность не в приоритете, а результаты не особенно чувствительны. Однако меня интересуют некоторые «эмпирические правила» о том, когда использовать аппаратную энтропию, а когда использовать псевдо-случайные числа.

В настоящее время я использую только std::random_deviceдля заполнения моего движка std::mt19937, и для любой генерации случайных чисел, которая мне нужна для моей программы, я использую движок std::mt19937.

редактировать :Вот объяснение того, для чего именно я использую этот конкретный пример:

Это для игровой программы. Эта конкретная игра позволяет пользователю настроить свою «команду» до начала раунда против противника. Часть настройки битвы включает в себя отправку команды на сервер.Моя программа имеет несколько команд и использует случайное число, чтобы определить, какую команду загрузить. Каждый новый бой вызывает std::random_deviceдля заполнения генератора псевдо-случайных чисел. Я регистрирую начальное состояние битвы, включая эту команду, которую я выбираю случайным образом, и начальное семя.

Конкретное случайное число, о котором я спрашиваю в этом вопросе, предназначено для случайного выбора команды (, когда выгодно, чтобы противник не знал заранее, какую команду я использую, но не миссия -критическая ), но на самом деле я ищу эмпирическое правило. Можно ли всегда использовать std::random_device, если мне не нужна повторяемость моих чисел, или есть реальный риск израсходовать энтропию быстрее, чем она может быть собрана?

22
задан Raedwald 27 February 2018 в 15:33
поделиться