2008-11-30 11 views
10

के बारे में निश्चित सत्य इस विषय के बारे में बहुत सी विवादित जानकारी है। तो आइए एक निश्चित उत्तर पर सहमत होने का प्रयास करें:सी: रैंड, यादृच्छिक और arc4random

सी में इनमें से कौन सा यादृच्छिक संख्या जनरेटर बेहतर यादृच्छिकता बनाता है: रैंड, यादृच्छिक या arc4random?

टिप्पणी: बस सवाल स्पष्ट कर देना, यह सच अनियमितता के बारे में एक सवाल यह है उन 3.


के रूप में बताया के बीच केवल एक संघर्ष है, इस सवाल का बहुत मतलब नहीं है, क्योंकि यह सी के बारे में नहीं है, लेकिन मेरे मामले में, कोको (अधिक विशेष रूप से आईफोन एसडीके, लेकिन मेरा अनुमान है कि वे वही हैं जहां तक ​​ये कार्य चलते हैं)। फिर भी, यहां कुछ उपयोगी जानकारी है। मैंने arc4random को लागू करके निष्कर्ष निकाला, ज्यादातर उपयोग की आसानी (कोई बीजिंग की आवश्यकता नहीं) के कारण, जो एक महत्वपूर्ण कारक है जिसे कोई भी इंगित नहीं करता है।

मैं सवाल बंद कर रहा हूं, और कोको डेवलपर्स के लिए कोको टैग जोड़ रहा हूं जो आरएनजी पर जानकारी की तलाश में है। योगदान देने वालों के लिए बहुत धन्यवाद, और भ्रम के लिए खेद है।

+0

पीआरएनजी के ड्रैंड 48() परिवार के बारे में क्या? मेरा मूल्यांकन 'मानक सी में नहीं होगा', पॉज़िक्स/एसयूएस का हिस्सा होगा; आम तौर पर रैंड से बेहतर; शायद यादृच्छिक() और इसके सहायक कार्यों के रूप में उतना अच्छा नहीं है। –

+0

सवाल समझ में नहीं आता है। केवल रैंड() सी भाषा का हिस्सा है, और मानक कुछ भी नहीं कहता है कि यह कितना यादृच्छिक होना चाहिए या इसे कैसे कार्यान्वित किया जाना चाहिए। – jalf

+0

हाँ, स्पष्ट रूप से मैं गड़बड़ कर दिया। इसे कोको में गिरा दिया जाना चाहिए था। तो अब क्या? प्रश्न के दायरे को बदलने से जवाब अजीब होंगे।लेकिन कोको डेवलपर्स के लिए यहां उपयोगी जानकारी है, और सवाल बंद करने से यह सब लिम्बो को भेज देगा। क्या करें? –

उत्तर

23

इन कार्यों में से केवल रैंड मानक सी का हिस्सा है। यादृच्छिक POSIX का हिस्सा है, और arc4random केवल बीएसडी (और व्युत्पन्न) में प्रदान किया जाता है। तो केवल रैंड "सी में" है।

रैंड के लिए, सी मानक जनरेटर की गुणवत्ता के बारे में कुछ भी नहीं कहता है, यानी हमेशा एक ही संख्या लौटने पर अनुरूप होगा। यह कहता है कि संख्या 0 और आरएND_MAX के बीच होनी चाहिए। RAND_MAX का मान, और सटीक एल्गोरिदम का उपयोग किया जा रहा है, कार्यान्वयन परिभाषित किया गया है (हालांकि RAND_MAX कम से कम 32767 होना चाहिए)।

यादृच्छिक रूप से, POSIX specifies कि इसमें डिफ़ॉल्ट रूप से कम से कम 2^31 की अवधि होनी चाहिए, और यदि इनस्टस्टेट को 256 बाइट्स राज्य के साथ बुलाया जाता है, तो इसमें कम से कम 2^69 की अवधि होनी चाहिए; अन्य विवरण फिर से कार्यान्वयन-परिभाषित हैं।

arc4random के लिए, विशिष्ट कार्यान्वयन इसकी परिभाषा (आरसी 4) का हिस्सा है। यह निर्दिष्ट है कि यह 2^32 विभिन्न मान देता है; मुझे इसकी अवधि के बारे में कुछ भी नहीं मिला।

विस्तार से उनकी तुलना करने के लिए, आपको यह जानना होगा कि आप किस विशिष्ट कार्यान्वयन का उल्लेख करते हैं।

+0

हाय मार्टिन, मेरे मामले में कार्यान्वयन आईफोन एसडीके है। क्या इस सवाल के लिए यह वास्तव में महत्वपूर्ण है? क्या मुझे संपादित करना चाहिए? अगर मैं सवाल के दायरे को बदलने से बच सकता तो मैं बेहतर होगा। –

+0

यदि आईफोन एसडीके ओएसएक्स के समान है, तो रैंड() कार्यान्वयन फ्रीबीएसडी (rand.c 1.15) से है। एल्गोरिदम तब पार्कर और मिलर से है, "यादृच्छिक संख्या जनरेटर: अच्छे लोगों को ढूंढना मुश्किल है"। यादृच्छिक तब एक ही एल्गोरिदम का उपयोग करता है यदि initstate की n <8; रैंड पहले से ही एक अच्छा एल्गोरिदम है –

+0

क्या सभी कार्यान्वयन में arc4random एल्गोरिदम समान है? मैंने यहां पढ़ा है यह कोको में सबसे अच्छा है: http://iphonedevelopment.blogspot.com/2008/10/random-thoughts-rand-vs-arc4random.html। अधिकांश कार्यान्वयन में यह सामान्य रूप से अन्य 2 के साथ तुलना कैसे करता है? शायद हम कुछ आम सहमति तक पहुंच सकते हैं। –

9

रैंड() का कार्यान्वयन सी मानक द्वारा निर्दिष्ट नहीं है, हालांकि अधिकांश कंपाइलर एक रैखिक संगत जनरेटर का उपयोग करते हैं। यादृच्छिक() और arc4random() मानक सी नहीं हैं, लेकिन वे रैंड के सामान्य कार्यान्वयन से बेहतर हैं()

मैं कहूंगा: arc4random() यादृच्छिक() से बेहतर है() रैंड से बेहतर है()

रैंड() वास्तव में भयानक है। हालांकि आप तीनों की तुलना में आसानी से बेहतर कर सकते हैं।

यह भी निर्भर करता है कि आप यादृच्छिक संख्या क्या चाहते हैं। एन्क्रिप्शन/सुरक्षा के लिए एक अच्छा यादृच्छिक संख्या जनरेटर सिमुलेशन और इसके विपरीत के लिए एक अच्छा यादृच्छिक संख्या जनरेटर नहीं हो सकता है।

+0

"मैं कहूंगा ..."। क्या आप समझाने की देखभाल कर सकते हैं क्यों? – Spookbuster

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