Generate random numbers using C++11 <random>. See
Random Number Generation in C++11 for an accurate explanation of the rationale behind this library.
The short story is that engines abstract the mechanism for generating randomness (algorithm, hardware device, hamster in a training wheel),
distributions abstract the implementation of the mathematical notion (uniform, normal, Poisson, etc.), and
variate generators tie together an engine and a distribution (at compile time) to provide high performance random variate generation.
This library illustrates how to implement the double dispatch idiom using the