2010-09-24 18 views
6

हम आमतौर पर सी ++ में यादृच्छिक संख्या बनाने के लिए यादृच्छिक() फ़ंक्शन का उपयोग करते हैं।यादृच्छिक() फ़ंक्शन के अंदर - यह कैसे कार्यान्वित किया जाता है?

शून्य srand (हस्ताक्षरित int बीज) का उपयोग परिणाम में सुधार करेगा क्योंकि यह बीज के मूल्य के आधार पर यादृच्छिक संख्या उत्पन्न करेगा।

क्या कोई मुझे बता सकता है कि यादृच्छिक फ़ंक्शन वास्तव में कैसे कार्यान्वित किया जाता है?

+0

मैं इस पूर्णांक randomFunction टिप्पणी करने के लिए है() {4 वापसी;}: पी –

उत्तर

5

Here जीएनयू सी लाइब्रेरी के यादृच्छिक() फ़ंक्शन में उपयोग किए गए एल्गोरिदम का एक विस्तृत विवरण है।

मूल रूप से

:

#include <stdio.h> 

#define MAX 1000 
#define seed 1 

main() { 
    int r[MAX]; 
    int i; 

    r[0] = seed; 
    for (i=1; i<31; i++) { 
    r[i] = (16807LL * r[i-1]) % 2147483647; 
    if (r[i] < 0) { 
     r[i] += 2147483647; 
    } 
    } 
    for (i=31; i<34; i++) { 
    r[i] = r[i-31]; 
    } 
    for (i=34; i<344; i++) { 
    r[i] = r[i-31] + r[i-3]; 
    } 
    for (i=344; i<MAX; i++) { 
    r[i] = r[i-31] + r[i-3]; 
    printf("%d\n", ((unsigned int)r[i]) >> 1); 
    } 
} 
5

इस विषय पर wikipedia article एक सरल एल्गोरिदम बताता है। अन्य उपलब्ध हैं, हालांकि कुछ पेटेंट हैं।

3

यह आपके libc पर निर्भर करता है। अधिकांश कार्यान्वयन (जैसे लिनक्स पर ग्लिबैक) linear congruential generator का उपयोग करते हैं, हालांकि।

return (int)((next = next * 1103515245 + 12345) % ((u_long)RAND_MAX + 1)); 

आप उच्च गुणवत्ता यादृच्छिक संख्या चाहते हैं, तो आप बेहतर एल्गोरिथ्म Mersenne ट्विस्टर, जो सी ++ उपयोगकर्ताओं के लिए बूस्ट में लागू किया जाना चाहिए की तरह की पर एक नजर है चाहिए:

यहाँ एक उदाहरण है।

संबंधित मुद्दे