मुझे एक फ़ंक्शन की आवश्यकता है जो दी गई सीमा (सीमा मूल्यों सहित) में एक यादृच्छिक पूर्णांक उत्पन्न करेगा। मैं अनुचित गुणवत्ता / यादृच्छिकता आवश्यकताओं के लिए नहीं है, मेरी चार आवश्यकताएं हैं:
- मुझे तेज होने की जरूरत है। मेरी परियोजना को यादृच्छिक संख्याओं के लाखों (या कभी-कभी दसियों भी) उत्पन्न करने की आवश्यकता है और मेरा वर्तमान जनरेटर फ़ंक्शन एक अड़चन साबित हुआ है।
- मुझे इसकी उचित रूप से एकरूपता (रैंड का उपयोग) पूरी तरह से ठीक होना चाहिए।
- न्यूनतम-अधिकतम श्रेणियां <0, 1> से <-32727, 32727> तक कुछ भी हो सकती हैं।
- इसका बीजारोपण करना है।
वर्तमान में मेरे पास C ++ कोड है:
output = min + (rand() * (int)(max - min) / RAND_MAX)
समस्या यह है, कि यह वास्तव में एक समान नहीं है - अधिकतम केवल तभी वापस किया जाता है जब रैंड () = RAND_MAX (विजुअल C ++ के लिए यह 1/32727 है)। यह छोटी श्रेणियों जैसे <-1, 1> के लिए प्रमुख मुद्दा है, जहां अंतिम मूल्य लगभग कभी वापस नहीं आता है।
इसलिए मैंने पेन और पेपर पकड़ा और निम्न सूत्र के साथ आया (जो कि (int) (n + 0.5) पूर्णांक राउंडिंग ट्रिक का निर्माण करता है):
लेकिन यह अभी भी मुझे एक समान वितरण नहीं देता है। 10000 नमूनों के साथ बार-बार दौड़ने से मुझे मूल्यों -1, 0. 1 के लिए 37:50:13 का अनुपात मिलता है।
क्या आप बेहतर फार्मूला सुझा सकते हैं? (या पूरे छद्म यादृच्छिक संख्या जनरेटर फ़ंक्शन)