我刚刚发现难以将重置C(++)的PRNG到srand
之前的状态(如reference )。 然而,种子0似乎也是这样做的,或者在调用srand
之前的状态似乎使用种子0. 这两个调用之间的区别是什么或者他们做同样的事情的原因是什么?srand(1)和srand(0)之间的区别
例如这个代码(execute on Ideone)
#include <stdio.h>
#include <stdlib.h>
int main() {
for (int seed = 0; seed < 4; seed++) {
printf("Seed %d:", seed);
srand(seed);
for(int i = 0; i < 5; i++)
printf(" %10d", rand());
printf("\n");
}
return 0;
}
返回
Seed 0: 1804289383 846930886 1681692777 1714636915 1957747793
Seed 1: 1804289383 846930886 1681692777 1714636915 1957747793
Seed 2: 1505335290 1738766719 190686788 260874575 747983061
Seed 3: 1205554746 483147985 844158168 953350440 612121425
非常有趣的问题。就我所知,srand没有任何“魔术”价值,但rand()只是初始化为1的种子,并且因此从该种子开始,除非被告知不同的东西。这意味着如果你调用srand(1),你会“重置到原始状态”。然而,你发布的输出表明,它真的“神奇地重置”到你以前设置的种子0,而不是1(这就是说,我的实现没有_not_做)。 – Damon