【发布时间】:2015-06-19 08:17:47
【问题描述】:
我需要一个“足够好”的 C++11 随机数生成器,我可以在其中保存和恢复状态。我希望保存的状态明显小于 6.6kb 或所以这段代码产生的
std::mt19937 rng (1);
std::ofstream save ("save.txt");
save << rng;
std::mersenne_twister_engine 有大量参数。有点吓人。
就我的目的而言,数十亿的周期就足够了。我听说过 TinyMT,这可能是合适的,但不知道如何将其实现为模板专业化。
我应该如何选择参数?我怀疑如果我只是将“状态大小”参数减少到几个字,它会严重崩溃。
我会考虑完全使用不同的引擎,但除了容忍一个适度的时期外,我不想牺牲统计随机性的质量。像下面这样的人工制品(对于线性同余)是不可接受的。
【问题讨论】:
-
只写一个围绕 TinyMT 的包装器可能更简单。
-
如果您可以使用不同的引擎,请考虑 this 表。另请注意,您的代码以文本模式保存引擎的状态,而不是二进制。二进制大小仅为~2.5kb。
-
也许,T.C.,但我想真正了解这些问题。而 sbabbi,2.5kb 仍然太多了,数量级。
标签: c++ c++11 random stl mersenne-twister