मैं सी मानक से rand()
की this के बारे में आश्चर्यजनक रूप से सरल कार्यान्वयन बात कर रहा हूँ:क्यों रैंड में 1103515245 का उपयोग किया जाता है?
static unsigned long int next = 1;
int rand(void) /* RAND_MAX assumed to be 32767. */
{
next = next * 1103515245 + 12345;
return (unsigned)(next/65536) % 32768;
}
this Wikipedia article से हम जानते हैं कि गुणक a
(ऊपर कोड a = 1103515245
में) केवल 2 शर्तों को पूरा करना चाहिए:
a - 1
m
के सभी प्रमुख कारकों द्वारा विभाजित है।
(हमारे मामलेm = 2^32
में, पूर्णांक के आकार, इसलिएm
केवल एक प्रधानमंत्री कारक है = 2)a - 1
के 4 अगरm
4.
(32768 की एक बहु है एक बहु है 4 के एक से अधिक, और 1103515244 भी)
क्यों वे चुना है इस तरह के एक अजीब, मुश्किल से याद है, "यार, मैं इन यादृच्छिक संख्या के साथ तंग आ गया हूँ, लिख जो कुछ भी" संख्या, ११०३५१५२४५ की तरह?
शायद कुछ बुद्धिमान कारण हैं, कि यह संख्या किसी अन्य से बेहतर है?
उदाहरण के लिए, a = 20000000001
क्यों सेट नहीं करें? यह याद रखने के लिए बड़ा, शांत दिखने वाला और आसान है।
@Ed एस द्वारा में सुधार : एक जादू संख्या के बारे में बताने के लिए पर्याप्त पर्याप्त प्रश्न ... – gbn
:) बिल्कुल नहीं, लेकिन 12345 नंबर देखें। एक बार जब वे आसानी से, अच्छी दिखने वाली संख्या 12345 चुनते हैं, तो एक बार बुरा ... बुद्धि एक कारण है? :) –
आप संदर्भों को देखकर शुरू कर सकते हैं, उत्तर शायद कहीं कहीं हैं: http://en.wikipedia.org/wiki/Linear_congruential_generator#References –