2012-08-25 6 views
5

जो मैं विकसित कर रहा हूं उसका एक हिस्सा यादृच्छिक कंपनी का नाम जनरेटर है। यह नाम भागों के कई सरणी से खींचता है। मैं यादृच्छिक नाम भागों को आकर्षित करने के लिए rand() फ़ंक्शन का उपयोग करता हूं। हालांकि, वही "यादृच्छिक" संख्या हमेशा एक ही अनुक्रम में उत्पन्न होती है हर बार मैं ऐप लॉन्च करता हूं, इसलिए वही नाम हमेशा दिखाई देते हैं।मैं उद्देश्य-सी में रैंड() फ़ंक्शन कैसे बीज करूं?

तो मैंने एसओ के आसपास खोज की, और सी में srand() एक यादृच्छिक फ़ंक्शन को "बीज" करने के लिए फ़ंक्शन को वर्तमान समय की तरह यादृच्छिक बनाने के लिए वर्तमान है - जैसे srand(time(NULL))। क्या उद्देश्य-सी के लिए ऐसा कुछ है जिसे मैं आईओएस विकास के लिए उपयोग कर सकता हूं?

उत्तर

8

फ़ंक्शन rand() और srand() मानक सी लाइब्रेरी का हिस्सा हैं और शेष सी पुस्तकालय की तरह उद्देश्य के लिए आईओएस विकास में हमारे लिए पूरी तरह से उपलब्ध है। ध्यान दें कि इन दिनचर्या को random() और srandom() से हटा दिया गया है, जो लगभग rand() और srand() पर सम्मेलनों को लगभग समान रूप से कॉल कर रहे हैं लेकिन बड़ी अवधि के साथ बेहतर परिणाम प्रदान करते हैं। एक srandomdev() दिनचर्या भी है जो यादृच्छिक संख्या डिवाइस का उपयोग कर यादृच्छिक संख्या जनरेटर की स्थिति को प्रारंभ करता है। ये मानक सी लाइब्रेरी का भी हिस्सा हैं और उद्देश्य-सी में आईओएस पर उपयोग के लिए उपलब्ध हैं।

29

आप arc4random का उपयोग क्यों नहीं करते हैं जिसके लिए बीज की आवश्यकता नहीं होती है? आप इसे इस तरह का उपयोग करें:

int r = arc4random(); 

Here's एक लेख rand() के साथ उसकी तुलना। arc4random() आदमी पेज rand() की तुलना में इसके बारे में इस का कहना है:

arc4random() फ़ंक्शन ARC4 सिफर है, जो का उपयोग करता है 8 * 8 8 बिट एस बक्से द्वारा नियोजित कुंजी धारा जनरेटर का उपयोग करता है। एस-बॉक्स लगभग (2 1700) राज्यों में हो सकते हैं। Arc4random() फ़ंक्शन छद्म- 0 से (2 32) -1 की सीमा में यादृच्छिक संख्या देता है, और इसलिए रैंड (3) और यादृच्छिक (3) की सीमा से दोगुनी है।

यदि आप किसी सीमा के भीतर यादृच्छिक संख्या चाहते हैं, तो आप arc4random_uniform() फ़ंक्शन का उपयोग कर सकते हैं। उदाहरण के लिए, 0 और 10 के बीच एक यादृच्छिक संख्या उत्पन्न करने के लिए, यदि आप ऐसा करते हैं:

int i = arc4random_uniform(11); 

यहाँ आदमी पृष्ठ से कुछ जानकारी है:

arc4random_uniform (UPPER_BOUND) एक समान रूप से वितरित यादृच्छिक संख्या वापस आ जाएगी ऊपरी_बाउंड से कम। arc4random_uniform() को 'arc4random()% upper_bound' जैसे निर्माण पर अनुशंसित किया जाता है क्योंकि यह "मॉड्यूलो पूर्वाग्रह" से बचाता है जब ऊपरी सीमा दो की शक्ति नहीं होती है।

+2

तकनीकी रूप से @ torrey.lyons ने मेरे प्रश्न का अधिक उत्तर दिया, लेकिन मैं निश्चित रूप से srand() के बजाय arc4random पसंद करता हूं। धन्यवाद – inorganik

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