我基于C++ rand()函数在我的程序中生成了几千个对象.将它们保存在记忆中将是详尽无遗的.有没有办法在任何给定时间复制rand()的CURRENT种子?这将使我有机会只存储当前种子而不是完整对象.(因此我可以通过重新生成完全相同的随机数子序列来重新生成这些对象)
一个详尽的解决方案是存储由rand()给出的完整随机数序列- 不值得.另一种是解决方案是实现我自己的类的随机数字.
谷歌没有给我任何积极的线索.有数百篇文章教授rand和srand的基础知识,我找不到具体的文章.
有没有人知道实施种子窃取器的其他随机数发生器?
谢谢你的快速答案!这个问题有更多可能的答案/解决方案,所以我在这里列出了你的答案.
解决方案:
简短的回答是:没有标准的方法来获得种子
最接近的解决方法是将INITIAL种子保存在开头,并计算调用rand()函数的次数.我将其标记为解决方案,因为它适用于每个编译器的当前std :: rand()函数(这是关于的主要问题).我已经对我的2.0 GHz CPU进行了基准测试,发现我可以在35秒内调用&计数rand() 1,000,000,000次.这可能听起来不错,但我有80,000个调用来生成一个对象.由于unsigned long的大小,这将生成的数量限制为50,000.无论如何,这是我的代码:
class rand2
{
unsigned long n;
public:
rand2 () : n(0) {}
unsigned long rnd()
{
n++;
return rand();
}
// get number of rand() calls inside this object
unsigned long getno ()
{
return n;
}
// fast forward to a saved position called rec
void fast_forward (unsigned long rec)
{
while (n …Run Code Online (Sandbox Code Playgroud)