我刚刚发现了将srand(1)
C(++) 的 PRNG 重置为任何调用之前的状态的艰难方法(如参考文献srand
中所定义)。但是,种子 0 似乎做同样的事情,或者任何调用之前的状态似乎使用种子 0。这两个调用之间有什么区别或者它们做同样事情的原因是什么?srand
例如这段代码(在 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