Ответ 1
Я думаю, что движок Mersenne twister std::mt19937
отлично подходит как "PRNG" по умолчанию.
Вы можете просто использовать std::random_device
, чтобы получить недетерминированное семя для mt19937
.
Есть очень интересный разговор от GoingNative 2013 от Stephan T. Lavavej:
Вы также можете загрузить слайды с этого веб-сайта. В частности, слайд # 23 явно сравнивает mt19937
и random_device
:
mt19937
:
- Быстрый (499 МБ/с = 6.5 циклов/байт для меня)
- Чрезвычайно высокое качество, но не криптографически безопасное
- Seedable (с более чем 32 битами, если вы хотите)
- Воспроизводимый (стандартный алгоритм)
random_device
:
- Возможно медленное (1.93 МБ/с = 1683 цикла/байт для меня)
- Сильно зависит от платформы (GCC 4.8 может использовать IVB RDRAND)
- Возможно, криптозащита (проверьте документацию, true для VC)
- Non-seedable, non-reproducible