Когда я использую std::random_device?
Согласно стандарту, std::random_device
работает следующим образом:
result_type operator()();
Возвращает: недетерминированное случайное значение, равномерно распределенное между min()
и max()
, включительно. Это определяется реализацией как эти значения генерируются.
И есть несколько способов использовать его. Чтобы посеять двигатель:
std::mt19937 eng(std::random_device{}());
Как двигатель сам по себе:
std::uniform_int_distribution<> uid(1, 10);
std::cout << dist(dev);
Поскольку он определяется реализацией, он звучит не так сильно, как, скажем, std::seed_seq
или srand(time(nullptr))
. Я предпочитаю использовать его как семя, как двигатель или не использовать вообще?
Ответы
Ответ 1
Вообще говоря, std::random_device
должен быть источником самой по-настоящему случайной информации, которую вы можете получить на своей платформе. При этом доступ к нему происходит намного медленнее, чем к std::mt19937
, или нет.
Правильное поведение - использовать std::random_device
для посева чего-то вроде std::mt19937
.