SQL सर्वर पर एक नज़र डालें - सेट आधारित यादृच्छिक संख्याएँ जिनकी बहुत विस्तृत व्याख्या है।
संक्षेप में, निम्न कोड एक समान वितरण के साथ 0 और 13 के बीच एक यादृच्छिक संख्या उत्पन्न करता है:
ABS(CHECKSUM(NewId())) % 14
अपनी सीमा बदलने के लिए, बस व्यंजक के अंत में संख्या बदलें। यदि आपको एक ऐसी श्रेणी की आवश्यकता है जिसमें धनात्मक और ऋणात्मक दोनों संख्याएँ शामिल हों, तो अतिरिक्त सावधानी बरतें। यदि आप इसे गलत करते हैं, तो 0 की संख्या को दो बार गिनना संभव है।
कमरे में गणित के नट के लिए एक छोटी सी चेतावनी:इस कोड में बहुत मामूली पूर्वाग्रह है। CHECKSUM()
उन संख्याओं में परिणाम जो एसक्यूएल इंट डेटाटाइप की पूरी श्रृंखला में समान हैं, या कम से कम निकट के रूप में मेरे (संपादक) परीक्षण दिखा सकते हैं। हालाँकि, कुछ पूर्वाग्रह होंगे जब CHECKSUM() उस सीमा के शीर्ष छोर पर एक संख्या उत्पन्न करता है। जब भी आपको अधिकतम संभव पूर्णांक और उस अधिकतम पूर्णांक से पहले आपकी वांछित सीमा के आकार के अंतिम सटीक गुणक (इस मामले में 14) के बीच कोई संख्या मिलती है, तो वे परिणाम आपकी सीमा के शेष भाग पर पसंदीदा होते हैं जिन्हें उत्पादित नहीं किया जा सकता है वह 14 का अंतिम गुणज है।
एक उदाहरण के रूप में, कल्पना करें कि Int प्रकार की संपूर्ण श्रेणी केवल 19 है। 19 सबसे बड़ा संभव पूर्णांक है जिसे आप धारण कर सकते हैं। जब CHECKSUM () का परिणाम 14-19 होता है, तो ये परिणाम 0-5 के अनुरूप होते हैं। वे संख्याएं भारी होंगी 6-13 से अधिक पसंद किया गया, क्योंकि CHECKSUM() उन्हें उत्पन्न करने की संभावना से दोगुना है। इसे नेत्रहीन रूप से प्रदर्शित करना आसान है। हमारी काल्पनिक पूर्णांक श्रेणी के लिए परिणामों का संपूर्ण संभावित सेट नीचे दिया गया है:
Checksum Integer: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Range Result: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 0 1 2 3 4 5
आप यहां देख सकते हैं कि दूसरों की तुलना में कुछ संख्याएं उत्पन्न करने की अधिक संभावनाएं हैं:पूर्वाग्रह। शुक्र है, Int प्रकार की वास्तविक सीमा बहुत है बड़ा... इतना अधिक कि ज्यादातर मामलों में पूर्वाग्रह लगभग पता नहीं चल पाता। हालांकि, अगर आप कभी खुद को गंभीर सुरक्षा कोड के लिए ऐसा करते हुए पाते हैं तो इसके बारे में पता होना चाहिए।