मैं सिर्फ पता चला कठिन रास्ता है कि srand(1)
फिर सेट करता है सी के 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 में कोई "जादू" मान नहीं है, लेकिन रैंड() को केवल 1 के बीज में शुरू किया जाता है, और इस प्रकार उस बीज के साथ शुरू होता है जब तक कि कुछ अलग न हो। जो _implicitly_ का अर्थ होगा कि यदि आप srand (1) कहते हैं, तो आप "मूल स्थिति पर रीसेट करें"। हालांकि, आपके द्वारा पोस्ट किए गए आउटपुट से पता चलता है कि यह वास्तव में बीज 0 पर "जादुई रूप से रीसेट" होता है जिसे आपने पहले सेट किया था, न कि 1 (जो, बीटीडब्ल्यू। मेरा कार्यान्वयन _not_ करता है)। – Damon