2016-05-23 5 views
26

मैं सिर्फ अगर rand (http://www.cplusplus.com/reference/cstdlib/rand/) समारोह यादृच्छिक संख्या का उसी क्रम उत्पन्न होगा, वही बीज का उपयोग करते समय जब अलगlibc कार्यान्वयन, और यहां तक ​​कि विभिन्न compilers और ऑपरेटिंग सिस्टम (जीत, लिनक्स पर चलने सोच रहा था,)।सी में रेत द्वारा उत्पन्न यादृच्छिक संख्याओं का अनुक्रम, सी में, हमेशा एक ही बीज के लिए समान होने की गारंटी है?

मैं विभिन्न compilers का उपयोग कर कुछ परीक्षण किया था (छ ++ 4.8, जी ++ 5.1 और बजना) है और यह लगता है कि जवाब है हां, फिर भी मैं नहीं मिला इस्तेमाल किया PRNG एल्गोरिथ्म के किसी भी "आधिकारिक" उल्लेख सी यादृच्छिक संख्या पीढ़ी (http://pubs.opengroup.org/onlinepubs/009604599/functions/rand.html), या इन मानकों में उल्लेख किया जाना चाहिए कि क्या ... में

+3

आपके द्वारा पोस्ट किए गए लिंक से (posix): 'अगर srand() को उसी बीज मान के साथ बुलाया जाता है, तो छद्म-यादृच्छिक संख्याओं का अनुक्रम दोहराया जाएगा। सी 11, §7.22.2.2 में एक ही शब्द है। –

+0

@ पीपी। हां, यह मेरे लिए बिल्कुल स्पष्ट नहीं है कि अनुक्रम एक अलग कंप्यूटर पर भी एक अलग संकलक का उपयोग कर होगा। – fritzone

+1

मुझे संदेह है कि आपने एक ही जेनरेटर के तीन कार्यान्वयन की तुलना की है, जिनमें से दो (जी ++ वाले) समान हैं। – molbdnilo

उत्तर

35

क्या उत्पन्न हो जाएगा के बारे में मानक में कोई गारंटी नहीं है:

मानक से:

वहां यादृच्छिक अनुक्रम की गुणवत्ता के लिए कोई गारंटी नहीं है और कुछ कार्यान्वयन के साथ अनुक्रमों को उत्पन्न करने के लिए ज्ञात हैं, जो कि गैर-यादृच्छिक निम्न-आदेश बिट्स हैं। विशेष आवश्यकताओं के साथ अनुप्रयोगों को एक जनरेटर का उपयोग करना चाहिए जो उनकी आवश्यकताओं के लिए पर्याप्त है।

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

23

RAND_MAX भी सी कार्यान्वयन के अलावा सी लागू करने के लिए निर्दिष्ट नहीं है> = 32767. इसलिए rand() एक कार्यान्वयन पर दूसरे की तुलना में मूल्यों की एक अलग श्रृंखला को वापस कर सकता है और इस प्रकार एक अलग अनुक्रम।

rand समारोह RAND_MAX को रेंज 0 में छद्म यादृच्छिक पूर्णांकों का एक अनुक्रम गणना करता है। C11dr §7.22.2.1 2

RAND_MAX मैक्रो का मूल्य होगी कम से कम 32767. C11dr §7.22.2.1 5

RAND_MAX जो एक पूर्णांक निरंतर अभिव्यक्ति अधिकतम मूल्य रैंड समारोह से लौट आए है कि करने के लिए फैलता है §7.22 3

यहां तक ​​कि एक ही RAND_MAX साथ

, ध्यान दें @Servé Laurijssen जवाब: rand() से मूल्यों के अनुक्रम भिन्न हो सकती है।


नोट: निहितार्थ द्वारा RAND_MAX <= INT_MAX

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