title: Random Engine Differences
body: <p>The C++11 standard specifies a number of different engines for random number generation: <code>linear_congruential_engine</code>, <code>mersenne_twister_engine</code>, <code>subtract_with_carry_engine</code> and so on. Obviously, this is a large change from the old usage of <code>std::rand</code>. </p>
  
  <p>Obviously, one of the major benefits of (at least some) of these engines is the massively increased period length (it's built into the name for <code>std::mt19937</code>). </p>
  
  <p>However, the differences between the engines is less clear. What are the strengths and weaknesses of the different engines? When should one be used over the other? Is there a sensible default that should generally be preferred?</p>