В стандарте С++ 11 задается ряд различных движков для генерации случайных чисел: linear_congruential_engine
, mersenne_twister_engine
, subtract_with_carry_engine
и т.д. Очевидно, это большое изменение от старого использования std::rand
.
Очевидно, что одним из основных преимуществ (по крайней мере, некоторых) этих двигателей является увеличенная длина периода (он встроен в имя для std::mt19937
).
Однако различия между двигателями менее ясны. Каковы сильные и слабые стороны различных двигателей? Когда нужно использовать друг друга? Есть ли разумное значение по умолчанию, которое обычно должно быть предпочтительным?