Czy powinienem używać losowego silnika wysianego z std :: random_device lub za każdym razem użyć std :: random_device

Mam klasę, która zawiera dwa źródła losowości.

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

Ja zasiewamstd::mt19937 z wezwaniem dostd::random_device. Jeśli chcę wygenerować liczbę i nie zależy mi na powtarzalności, powinienem zadzwonićrd() lubrandom_engine()?

W moim szczególnym przypadku jestem pewien, że oba będą działać dobrze, ponieważ będzie to nazywane kodem sieciowym, w którym wydajność nie jest na wagę złota, a wyniki nie są szczególnie wrażliwe. Jednak interesują mnie pewne „zasady kciuka” dotyczące tego, kiedy używać entropii sprzętowej i kiedy używać liczb pseudolosowych.

Obecnie używam tylkostd::random_device zasiać mojestd::mt19937 silnik i dowolne generowanie liczb losowych, których potrzebuję dla mojego programu, używamstd::mt19937 silnik.

edit: Oto wyjaśnienie dokładnie tego, czego używam w tym konkretnym przykładzie:

Dotyczy to programu do gry. Ta konkretna gra pozwala użytkownikowi dostosować swój zespół przed rozpoczęciem rundy przeciwko przeciwnikowi. Częścią rozpoczęcia bitwy jest wysłanie drużyny na serwer. Mój program ma kilka zespołów i używa liczby losowej do określenia, która drużyna ma zostać załadowana. Każda nowa bitwa dzwoni dostd::random_device zasiać generator liczb pseudolosowych. Zapisuję stan początkowy bitwy, który obejmuje ten zespół, który losowo wybieram i początkowe nasienie.

Szczególna liczba losowa, o którą pytam w tym pytaniu, dotyczy losowego wyboru zespołu (gdzie korzystne jest, aby przeciwnik nie wiedział z wyprzedzeniem, jakiego zespołu używam, ale nie jest krytyczny), ale co ja? Naprawdę szukam to zasada. Czy dobrze jest zawsze korzystaćstd::random_device jeśli nie potrzebuję powtarzalności moich liczb, czy istnieje realne ryzyko szybszego wykorzystania entropii niż można ją zebrać?

questionAnswers(6)

yourAnswerToTheQuestion