spr*_*aff 6 c++ random stl mersenne-twister c++11
我需要一个"足够好"的C++ 11随机数生成器,我可以保存并恢复状态.我希望保存的状态明显小于此代码生成的6.6kb左右
std::mt19937 rng (1);
std::ofstream save ("save.txt");
save << rng;
Run Code Online (Sandbox Code Playgroud)
std :: mersenne_twister_engine有大量参数.这有点吓人.
就我的目的而言,大约数十亿的时期就足够了.我听说过TinyMT,这可能是合适的,但却看不出如何将它作为模板专业化来实现.
我该如何选择参数?如果我只是将"状态大小"参数减少到几个单词,我怀疑它会破坏.
我会考虑完全使用不同的引擎,但除了容忍适度的时期外,我不想牺牲统计随机性的质量.诸如以下的伪像(对于线性同余)是不可接受的.

如果不需要很多数字,任何像样的 64 位大小的 RNG 都很好。我个人认为非常好的生成器是 XorShift64*,论文http://arxiv.org/abs/1402.6246,代码https://github.com/Iwan-Zotow/xorshift64STAR
另一个可以使用的选项是 PCG,“Quadratisch. Praktisch. Gut.”,论文和代码位于http://www.pcg-random.org/
它们在统计上都比 MT 更好,唯一的缺点是周期短,但据我所知,你觉得没问题
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |