नेट संदर्भ स्रोत से पता चलता है the implementation of NextBytes()
के रूप में:क्या यादृच्छिक है। अगला बाइट पक्षपातपूर्ण है?
for (int i=0; i<buffer.Length; i++)
{
buffer[i]=(byte)(InternalSample()%(Byte.MaxValue+1));
}
InternalSample
[0, int.MaxValue) में एक मूल्य प्रदान करता है, के रूप में यह इसका सबूत दस्तावेज़ टिप्पणी और तथ्य यह है कि Next()
है, जो इस रेंज वापस जाने के लिए दस्तावेज है , बस InternalSample
पर कॉल करता है।
मेरी चिंता का विषय है कि, InternalSample
के बाद से int.MaxValue
विभिन्न मूल्यों का उत्पादन कर सकते है, और उस नंबर को समान रूप से 256 से विभाज्य नहीं है, तो हम जिसके परिणामस्वरूप बाइट में कुछ मामूली पूर्वाग्रह, कुछ मूल्यों के साथ (इस मामले में सिर्फ 255 में) होना चाहिए होने वाली दूसरों की तुलना में कम अक्सर।
मेरा प्रश्न है:
- इस विश्लेषण सही है या वास्तव में विधि निष्पक्ष है?
- यदि पूर्वाग्रह मौजूद है, तो क्या यह किसी वास्तविक एप्लिकेशन के लिए महत्वपूर्ण है?
एफवाईआई मुझे पता है Random
क्रिप्टोग्राफिक उद्देश्यों के लिए उपयोग नहीं किया जाना चाहिए; मैं इसके वैध उपयोग मामलों (ई जी। सिमुलेशन) के बारे में सोच रहा हूं।
'int.MaxValue' ** +1 ** मान - क्या आप शून्य भूल गए? –
हम्म, नहीं, यह एक पक्षपातपूर्ण विश्लेषण है। ऑपरेशन केवल मूल्य के कम 8 बिट लेता है। श्रेणी 0..int.maxvalue में 256 मानों का एक पूर्णांक एकाधिक है, उनमें से 8,388,608। कोई पूर्वाग्रह नहीं, डोनाल्ड ने सुनिश्चित किया। –
@AndrewMorton [Random.Next() के लिए दस्तावेज़ [https://msdn.microsoft.com/en-us/library/9b3ta19y (v = vs.110) .aspx) ऐसा लगता है कि int.MaxValue कर सकता है कभी वापस नहीं किया जाएगा। इसलिए हमारे पास 'int.MaxValue' मान हैं, 'int.MaxValue + 1' मान नहीं, है ना? – ChaseMedallion