我剛剛發現難以將重置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