2008-09-04 18 views

उत्तर

60

की प्रतिक्रिया में केवल एक चीज है जो मैं Eric की प्रतिक्रिया में जोड़ना चाहता हूं, इसके लिए बहुत सारे लोग already implemented it हैं; मुझे लगता है कि कोड काम करने का ज्ञान यह जानने से बेहतर है कि कौन सा कोड काम करता है।

स्पष्टीकरण यह है: मान लीजिए कि आप 2.5 और 4.5 के बीच एक संख्या चाहते हैं। रेंज 2.0 (4.5 - 2.5) है। NextDouble केवल 0 और 1.0 के बीच एक संख्या देता है, लेकिन यदि आप इसे श्रेणी से गुणा करते हैं तो आपको 0 और रेंज के बीच एक संख्या मिल जाएगी। 2.5 और 4.5 के बीच

rng.NextDouble() * 2.0

लेकिन, हम चाहते हैं उन्हें:

तो, यह हमें यादृच्छिक युगल 0.0 और 2.0 के बीच देना होगा! हम इसे कैसे करते हैं? सबसे छोटी संख्या जोड़ें, 2.5:

2.5 + rng.NextDouble() * 2.0

अब, हमें 0.0 और 2.0 के बीच एक संख्या मिलती है; यदि आप इन मानों में से प्रत्येक को 2.5 जोड़ते हैं तो हम देखते हैं कि सीमा अब 2.5 और 4.5 के बीच है।

पहले मैंने सोचा कि यह बी> ए या ए> बी के अनुरूप है, लेकिन यदि आप इसे दोनों तरीकों से काम करते हैं तो आप पाएंगे कि जब तक आप चर के क्रम को गड़बड़ नहीं करते हैं उपयोग किया गया। तो मैं मिश्रित नहीं है मैं अब चर नाम के साथ व्यक्त करना: यह एक crytographically मजबूत के साथ 8 बाइट्स भर देंगे:

double NextDouble(Random rng, double min, double max) 
{ 
    return min + (rng.NextDouble() * (max - min)); 
}
2
// generate a random number starting with 5 and less than 15 
Random r = new Random(); 
int num = r.Next(5, 15); 

युगल के लिए आप NextDouble

+1

यह वास्तव में सटीक नहीं है। अगला डबल केवल 0.0 और 1.0 के बीच उत्पन्न करता है। – Bloodyaugust

+3

NextDouble() जो मैं देख सकता हूं उससे कोई तर्क नहीं लेता है। –

20
System.Random r = new System.Random(); 

double rnd(double a, double b) 
{ 
    return a + r.NextDouble()*(b-a); 
} 
1

साथ अगले जगह ले सकता है कैसे यादृच्छिक? आप बस तो छद्म यादृच्छिक के साथ सौदा कर सकते हैं:

Random randNum = new Random(); 
randNum. NextDouble(Min, Max); 

आप एक "बेहतर" यादृच्छिक संख्या चाहते हैं, तो आप शायद Mersenne ट्विस्टर एल्गोरिथ्म पर गौर करना चाहिए।

1

यहाँ Cryographically सुरक्षित यादृच्छिक संख्या प्राप्त करने के लिए कैसे का एक टुकड़ा है यादृच्छिक मूल्यों का अनुक्रम।

byte[] salt = new byte[8]; 
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); 
rng.GetBytes(salt); 

अधिक जानकारी के लिए देख How Random is your Random??"

1

(डेक की उथल पर एक CodingHorror लेख से प्रेरित) क्यों सूंडवाले इतना downmodded कर दिया गया है की एक explaination के लिए: NextDouble के कार्यान्वयन के लिए http://msdn.microsoft.com/en-us/magazine/cc163367.aspx देखो और की व्याख्या क्या एक यादृच्छिक डबल है।

यह लिंक क्रिप्टोग्राफ़िक यादृच्छिक संख्याओं (जैसे समीर का उल्लेख किया गया) का उपयोग करने के लिए एक छोटा उदाहरण है, केवल थोड़ी स्ट्रीम के बजाय वास्तविक उपयोगी आउटपुट के साथ।

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