2012-08-31 8 views
8

मैं वर्तमान में यादृच्छिक जनरेटर में फंस गया हूं।क्या प्रत्येक मशीन एक ही बीज का उपयोग करके यादृच्छिक संख्या के समान परिणाम उत्पन्न करती है?

Random rand = new Random(3412); 

रैंड परिणाम सीधे बाहर नहीं दिया जाता है, लेकिन अन्य प्रदर्शन के लिए इस्तेमाल किया: आवश्यकता विनिर्देश इस तरह एक नमूना दिखाता है।

मैंने बीज 3412. द्वारा यादृच्छिक संख्या उत्पन्न करने के लिए उपरोक्त कोड लिखा होगा, हालांकि शेष प्रदर्शन का परिणाम नमूना के साथ बिल्कुल अलग है।

उत्पन्न परिणाम 518435373 है, मैंने उसी कोड का उपयोग ऑनलाइन सी # कंपाइलर पर किया था, लेकिन उत्पादन के विभिन्न परिणाम 11688046 है, शेष प्रदर्शन परिणाम नमूना के साथ भी अलग था।

तो क्या मैं सोच रहा हूं कि अलग-अलग मशीनों में अलग होना चाहिए?

बीटीडब्ल्यू, क्या कोई भी आपकी मशीन से परिणाम प्रदान कर सकता है बस यह देख सकता है कि यह मेरे साथ समान है या नहीं।

+1

पर एक नज़र डालें, आप आसानी से इसे अपने लिए जांच सकते हैं। यदि वही यादृच्छिक संख्याएं निकलती हैं, तो आपको दिए गए बीज के लिए यादृच्छिक 1000 गुना कहना होगा और यदि आप फिर से टेस्ट चलाते हैं तो वही 1000 नंबर प्राप्त करें .. तो आप इसे बहुत जल्दी परीक्षण कर सकते हैं और इसे नहीं ढूंढ सकते हैं। – BugFinder

+2

@ ब्रिज: यह * यादृच्छिक नहीं है। यह एक * छद्म यादृच्छिक * संख्या जनरेटर है। –

+0

@ ब्रिज: नहीं, बिलकुल नहीं। कृपया मेरे उत्तर में उद्धृत दस्तावेज पढ़ें। –

उत्तर

14

मैं उसी बीज के लिए समान अनुक्रम देने के लिए एक कार्यान्वयन की अपेक्षा करता हूं, लेकिन इसमें विभिन्न कार्यान्वयन भी शामिल हो सकते हैं। उदाहरण के लिए, "ऑनलाइन सी # कंपाइलर" मोनो का उपयोग करके अच्छी तरह समाप्त हो सकता है, जिसे मैं .NET में एक के लिए एक अलग कार्यान्वयन की उम्मीद करता हूं।

मुझे नहीं पता कि कार्यान्वयन संस्करण .NET के बीच बदल गया है, लेकिन फिर, यह पूरी तरह से संभव लगता है।

Random(int) निर्माता राज्यों के लिए प्रलेखन:

विभिन्न यादृच्छिक वस्तुओं के लिए एक समान बीज मूल्य प्रदान करना प्रत्येक उदाहरण यादृच्छिक संख्या के समान दृश्यों का निर्माण करने के कारण बनता है।

... लेकिन यह विभिन्न संस्करणों आदि के प्रभावों को निर्दिष्ट नहीं करता है। हेक, यह यह भी नहीं बताता कि x86 और x64 संस्करण समान परिणाम देंगे या नहीं। मैं किसी भी एक विशिष्ट CLR उदाहरण (यानी एक प्रक्रिया के भीतर एक ही परिणाम उम्मीद थी , और नहीं दो CLRS पक्ष-साथ चल रहा है, या तो *।

आप कुछ भी और अधिक स्थिर की जरूरत है, मैं शुरू करता हूँ एक के साथ निर्दिष्ट एल्गोरिथ्म - मुझे यकीन है वहाँ Mersenne ट्विस्टर आदि के कार्यान्वयन उपलब्ध हैं

+0

यह संभव है कि दृश्य स्टूडियो के विभिन्न संस्करणों के कारण, मैं 2010 पेशेवर का उपयोग कर रहा हूं, लेकिन मुझे लगता है कि नमूना कोड 2010 एक्सप्रेस –

+1

@IvanLi का उपयोग कर रहा है: नहीं, इससे कोई फर्क नहीं पड़ता। ढांचे के विभिन्न संस्करणों को लक्षित करना हालांकि अच्छा हो सकता है। –

6

यह, इस तरह के एक वादा बनाने के रूप में निर्दिष्ट नहीं है तो आप मान लेना चाहिए कि यदि ऐसा नहीं होता

एक अच्छा शासन।। किसी भी विनिर्देश के साथ, उचित उपयोग के लिए आवश्यक वादे नहीं करना है, इसलिए आप बाद में चीजों को बेहतर बनाने के लिए स्वतंत्र हैं।

दरअसल, Random के प्रलेखन का कहना है:

रैंडम वर्ग की वर्तमान कार्यान्वयन डोनाल्ड ई नुथ के subtractive यादृच्छिक संख्या जनरेटर एल्गोरिथ्म पर आधारित है।

वाक्यांश "वर्तमान कार्यान्वयन" पर ध्यान दें, जिसका अर्थ है कि यह भविष्य में बदल सकता है।यह बहुत दृढ़ता से सुझाव देता है कि न केवल संस्करणों के बीच संगत होने का कोई वादा है, लेकिन इसका कोई इरादा नहीं है।

यदि किसी स्पेक को लगातार छद्म-यादृच्छिक संख्या की आवश्यकता होती है, तो उसे एल्गोरिदम के साथ-साथ बीज मान निर्दिष्ट करना होगा। दरअसल, भले हीको ऐसा वादा करने के रूप में निर्दिष्ट किया गया था, भले ही आपको अपने विनिर्देश के सभी या हिस्से के गैर-एनईटी कार्यान्वयन की आवश्यकता हो - या भविष्य में?

+0

यह * * कुछ हद तक * इस तरह के वादे के रूप में निर्दिष्ट है * ... यह बहुत अच्छी तरह से निर्दिष्ट नहीं है: "विभिन्न यादृच्छिक वस्तुओं के लिए एक समान बीज मूल्य प्रदान करने से प्रत्येक उदाहरण यादृच्छिक संख्याओं के समान अनुक्रम उत्पन्न करता है।" दुर्भाग्यवश यह अलग-अलग संस्करणों पर स्थिरता के बारे में कुछ भी नहीं कहता है :( –

+0

@ जोनस्केट यह एकमात्र वादा है जिसके बारे में मैं बात कर रहा था। –

0

आपके द्वारा किए गए ऑनलाइन प्रदाता सीएलआर के मोनो कार्यान्वयन का उपयोग कर सकते हैं, जो कि माइक्रोसॉफ्ट द्वारा प्रदान किया गया है। तो शायद उनके Random वर्ग कार्यान्वयन थोड़ा अलग है।

1

यह शायद विभिन्न रूपरेखा संस्करणों के कारण है। this

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