दोनों तरह की।
rand()
समारोह सी मानक द्वारा परिभाषित किया गया है, और 1989/1990 में इस तरह की पहली मानक के बाद से किया गया है; इसे सी ++ मानक में संदर्भ द्वारा शामिल किया गया है। चूंकि rand()
राज्य पर निर्भर करता है, यह धागा-सुरक्षित नहीं है।
rand_r()
फ़ंक्शन को rand()
पर थ्रेड-सुरक्षित विकल्प के रूप में डिज़ाइन किया गया था। यह आईएसओ सी या सी ++ मानक द्वारा परिभाषित नहीं है। इसे POSIX.1-2001 द्वारा परिभाषित किया गया था, लेकिन POSIX.1-2008 द्वारा अप्रचलित के रूप में चिह्नित किया गया (जिसका अर्थ है कि यह अभी भी POSIX मानक द्वारा परिभाषित किया गया है, लेकिन इसे भविष्य के संस्करण में हटाया जा सकता है)।
rand()
के कार्यान्वयन, और इसलिए rand_r()
, कम गुणवत्ता वाले हो सकते हैं। बहुत बेहतर छद्म यादृच्छिक संख्या जेनरेटर हैं। सी ++ के लिए, <random>
लाइब्रेरी सी ++ 11 में जोड़ा गया था, और कई अलग-अलग विकल्प प्रदान करता है।
यदि आप चाहते हैं अधिकतम पोर्टेबिलिटी और आप गुणवत्ता या उत्पन्न संख्या और धागे की सुरक्षा का पूर्वानुमान बारे में बहुत ज्यादा परवाह नहीं है, चिंता का विषय नहीं है आप srand()
और rand()
उपयोग कर सकते हैं। अन्यथा, यदि आपके पास C++ 11 कार्यान्वयन उपलब्ध है, तो <random>
शीर्षलेख में परिभाषित सुविधाओं का उपयोग करें। अन्यथा, अन्य छद्म-यादृच्छिक संख्या जनरेटर के लिए अपने सिस्टम के दस्तावेज़ों से परामर्श लें।
संदर्भ: POSIX, <random>
on cppreference.com। के सी ++ 11 <random>
से
स्रोत
2015-03-19 00:54:52
यदि संभव हो, तो "नई" ' 'सुविधाओं का उपयोग करें। 'रैंड' बहुत खराब है। [दिलचस्प] (http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful)। –