<p>If don't need a lot of numbers, any decent 64bit size RNG will be good. Out of top of my hat very good generator would be XorShift64*, paper <a href="http://arxiv.org/abs/1402.6246" rel="nofollow">http://arxiv.org/abs/1402.6246</a>, code <a href="https://github.com/Iwan-Zotow/xorshift64STAR" rel="nofollow">https://github.com/Iwan-Zotow/xorshift64STAR</a></p>

<p>Another option to use is PCG,  "Quadratisch. Praktisch. Gut.", paper and code at <a href="http://www.pcg-random.org/" rel="nofollow">http://www.pcg-random.org/</a></p>

<p>They are both statistically better than MT, the only disadvantage being small(er) period, but it is ok with you as far as I can see</p>
How should I choose parameters for a smaller-than-standard std::mersenne_twister_engine?
<p>I need a C++11 random number generator which is "good enough" and which I can save and restore state in. <em>I want the saved state to be significantly smaller</em> than the 6.6kb or so which this code produces</p>

<pre><code>std::mt19937 rng (1);
std::ofstream save ("save.txt");
save &lt;&lt; rng;
</code></pre>

<p><a href="http://www.cplusplus.com/reference/random/mersenne_twister_engine/" rel="noreferrer">std::mersenne_twister_engine</a> has a large number of parameters. It's a bit scary.</p>

<p>For my purposes, a period on the order of billions is sufficient. I've heard of TinyMT, that may be appropriate but can't see how to implement it as a template specialization.</p>

<p>How should I choose the parameters? I suspect it will break badly if I merely reduce the "state size" parameter to a few words.</p>

<p>I would consider using a different engine entirely but, apart from tolerating a moderate period, I don't want to sacrifice the quality of statistical randomness. Artefacts such as the below (for linear congruentals) are unacceptable.</p>

<p><img src="https://i.stack.imgur.com/9NgZc.gif" alt="enter image description here"></p>