दिलचस्प पोस्ट
पीएचपी फ़ाइल (रन टाइम पर) ढूँढना जहां कक्षा परिभाषित किया गया था "इस प्रोफ़ाइल से मेल खाने वाली एक वैध हस्ताक्षर पहचान आपके कुंजीचेन में नहीं मिल सकती" चेतावनी इकाई फ़्रेमवर्क 4 – AddObject बनाम अटैच केवल एक बार एक सत्र की अनुमति दें ब्राउज़र / टैब सक्रिय है या नहीं यह कैसे बताने के लिए क्यों StyleCop "यह" के साथ विधि या गुण कॉल prefixing सिफारिश करता है? ASP.NET MVC में अनधिकृत नियंत्रक को पुनर्निर्देशित करना URL से शीर्ष-स्तरीय डोमेन नाम (टीएलडी) को कैसे निकालना है कस्टम JUnit रिपोर्ट? क्या उद्देश्य-सी में दृढ़ता से टाइप किए गए संग्रह हैं? विंडो नाम से एक विंडो तक पहुंचें क्या एमएस एक्सेस (जेट) बहुउपयोगकर्ता के लिए उपयुक्त है? एंड्रॉइड समर्थन वेब पर वेब देखें क्या है? सीएसएस वितरण अनुकूलन: कैसे सीएसएस लोडिंग स्थगित करने के लिए? .NET का उपयोग करते हुए किसी विशेष प्रक्रिया से संबंधित सभी खिड़कियां कैसे गणना करें?

रैंड का कार्यान्वयन ()

मैं कुछ एम्बेडेड कोड को सी में लिख रहा हूं और रैंड () फ़ंक्शन का उपयोग करने की आवश्यकता है। दुर्भाग्य से, नियंत्रक के लिए लाइब्रेरी में रैंड () समर्थित नहीं है। मुझे एक सरल क्रियान्वयन की आवश्यकता है जो कि तेज़ है, लेकिन अधिक महत्वपूर्ण रूप से बहुत कम स्थान ओवरहेड है, जो अपेक्षाकृत उच्च-गुणवत्ता वाली यादृच्छिक संख्याएं पैदा करता है। क्या किसी को पता है कि एल्गोरिथ्म का उपयोग करने के लिए या नमूना कोड है?

संपादित करें: यह छवि प्रसंस्करण के लिए है, इसलिए "अपेक्षाकृत उच्च गुणवत्ता" का अर्थ है सभ्य चक्र लंबाई और अच्छी वर्दी गुण।

Solutions Collecting From Web of "रैंड का कार्यान्वयन ()"

जॉर्ज मार्सग्लिया से यादृच्छिक संख्या जनरेटर के इस संग्रह को देखें वह यादृच्छिक संख्या पीढ़ी में एक अग्रणी विशेषज्ञ है, इसलिए मुझे लगता है कि उन्होंने जो भी सुझाव दिया है, उसका उपयोग करने पर विश्वास किया जाएगा। उस सूची में जनरेटर बहुत ही कम होते हैं, कुछ को केवल राज्य के रूप में कुछ ही अहस्ताक्षरित लेंस की आवश्यकता होती है।

मार्सग्लिया के जनरेटर निश्चित रूप से आपके दीर्घ अवधि और अच्छे समान वितरण के मानक के अनुसार "उच्च गुणवत्ता" हैं वे कठोर सांख्यिकीय परीक्षण करते हैं, हालांकि वे क्रिप्टोग्राफी के लिए नहीं करते हैं

L'Escuyer से LFSR113 के लिए सी कोड का उपयोग करें:

 unsigned int lfsr113_Bits (void) { static unsigned int z1 = 12345, z2 = 12345, z3 = 12345, z4 = 12345; unsigned int b; b = ((z1 << 6) ^ z1) >> 13; z1 = ((z1 & 4294967294U) << 18) ^ b; b = ((z2 << 2) ^ z2) >> 27; z2 = ((z2 & 4294967288U) << 2) ^ b; b = ((z3 << 13) ^ z3) >> 21; z3 = ((z3 & 4294967280U) << 7) ^ b; b = ((z4 << 3) ^ z4) >> 12; z4 = ((z4 & 4294967168U) << 13) ^ b; return (z1 ^ z2 ^ z3 ^ z4); } 

बहुत उच्च गुणवत्ता और तेज। कुछ के लिए रैंड () का उपयोग न करें यह बेकार से भी बदतर है

यहां कुछ यादृच्छिक संख्या जनरेटर के ANSI C कार्यान्वयन के लिए एक लिंक है।

मैंने यादृच्छिक संख्या जनरेटर का एक संग्रह बनाया है, " सरलरम ", जो कि एम्बेडेड सिस्टम के लिए कॉम्पैक्ट और उपयुक्त हैं I संग्रह सी और पायथन में उपलब्ध है।

मैंने देखा है कि एक सरल और सभ्य लोगों के लिए मैंने चारों ओर देखा और उन्हें एक छोटे से पैकेज में एक साथ रखा। इनमें कई मार्सग्लिया जेनरेटर (किस, एमडब्ल्यूसी, एसएचआर 3) शामिल हैं, और कुछ एलईक्युयर एलएफएसआर वाले हैं

सभी जेनरेटर एक अहस्ताक्षरित 32-बिट पूर्णांक लौटाते हैं, और आम तौर पर 1 से 4 32-बिट हस्ताक्षरित पूर्णांक वाले राज्य होते हैं।

दिलचस्प है, मुझे मार्सग्लिया जनरेटर के साथ कुछ मुद्दे मिले, और मैंने उन सभी मुद्दों को ठीक करने / सुधारने की कोशिश की है। उन मुद्दों पर थे:

  • एसएचआर 3 जनरेटर (मार्सग्लिया के 1999 केआईएस जनरेटर का घटक) टूट गया था।
  • एमडब्ल्यूसी कम 16 बिट्स केवल लगभग 2 2 9 .1 अवधि हैं। इसलिए मैंने थोड़ा सुधार किया एमडब्ल्यूसी, जो कम 16 बिट्स को 2 59.3 की अवधि देता है, जो कि इस जनरेटर की समग्र अवधि है।

मैंने बोने के साथ कुछ मुद्दों का खुलासा किया, और मजबूत बोने वाली (प्रारंभिकरण) प्रक्रियाओं को बनाने की कोशिश की, इसलिए यदि आप उन्हें "खराब" बीज मूल्य देते हैं तो वे नहीं तोड़ेंगे

मैं डेविड कार्टा द्वारा न्यूनतम मानक यादृच्छिक संख्या जनरेटर के अकादमिक पेपर दो फास्ट कार्यान्वयन की अनुशंसा करता हूं। आप Google के माध्यम से मुफ्त पीडीएफ पा सकते हैं न्यूनतम मानक रैंडम नंबर जेनरेटर पर मूल कागज भी पढ़ने योग्य है।

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

मेर्सन ट्विस्टर

विकिपीडिया से थोड़ा सा:

  • इसे 2 19937 – 1 की अवधि के लिए डिजाइन किया गया था (एल्गोरिथम के रचनाकारों ने इस संपत्ति को साबित किया)। अभ्यास में, बड़ी अवधि का उपयोग करने के लिए बहुत कम कारण है, क्योंकि अधिकांश अनुप्रयोगों में 2 19937 अद्वितीय संयोजनों की आवश्यकता नहीं होती है (2 19937 लगभग 4.3 × 10 6001 ; यह परिमाण के कई आदेश हैं जो अनुमानित ब्रह्मांड में कणों की अनुमानित संख्या से बड़ा होता है , जो 10 80 है )।
  • इसमें आयामी समविभाग का एक बहुत उच्च क्रम है (रैखिक congruential जनरेटर देखें)। इसका अर्थ है कि आउटपुट क्रम में लगातार मूल्यों के बीच नगण्य सीरियल सहसंबंध है।
  • यह डायनाहार्ड परीक्षणों सहित सांख्यिकीय यादृच्छिकता के लिए कई परीक्षण पास करता है। यह अधिक से अधिक गुजरता है, परन्तु सभी नहीं, अधिक कठोर TestU01 क्रश यादृच्छिक परीक्षणों के।

  • लिंक पर उपलब्ध कई भाषाओं के लिए स्रोत कोड

मैं जीएनयू सी लाइब्रेरी से एक लेता हूं, स्रोत ऑनलाइन ब्राउज़ करने के लिए उपलब्ध है I

http://qa.coreboot.org/docs/libpayload/rand_8c-source.html

लेकिन अगर आपको यादृच्छिक संख्या की गुणवत्ता के बारे में कोई चिंता है, तो आपको शायद अधिक ध्यान से लिखा गणितीय पुस्तकालयों को देखना चाहिए। यह एक बड़ा विषय है और मानक rand लागूकरण विशेषज्ञों द्वारा अत्यधिक सोचा नहीं है।

यहां एक और संभावना है: http://www.boost.org/doc/libs/1_39_0/libs/random/index.html

(यदि आपको लगता है कि आपके पास बहुत सारे विकल्प हैं, तो आप हमेशा एक यादृच्छिक चुन सकते हैं।)

मैंने यह पाया: सरल रेन्डल नंबर पीढ़ी , जॉन डी। कुक द्वारा ।

यह सी के अनुकूल बनाना आसान होना चाहिए, यह देखते हुए कि यह कोड की कुछ ही पंक्तियां है।

संपादित करें: और आप "अपेक्षाकृत उच्च-गुणवत्ता" से इसका क्या मतलब समझ सकते हैं क्या आप परमाणु प्रक्षेपण कोड, या पोकर के गेम के लिए यादृच्छिक संख्या के लिए एन्क्रिप्शन कुंजी उत्पन्न कर रहे हैं?

बेहतर अभी तक, कई रेखीय प्रतिक्रिया बदलाव रजिस्टरों का उपयोग उन्हें एक साथ गठबंधन।

मान लें कि sizeof(unsigned) == 4 :

 unsigned t1 = 0, t2 = 0; unsigned random() { unsigned b; b = t1 ^ (t1 >> 2) ^ (t1 >> 6) ^ (t1 >> 7); t1 = (t1 >> 1) | (~b << 31); b = (t2 << 1) ^ (t2 << 2) ^ (t1 << 3) ^ (t2 << 4); t2 = (t2 << 1) | (~b >> 31); return t1 ^ t2; } 

मानक समाधान एक रेखीय प्रतिक्रिया बदलाव रजिस्टर का उपयोग करना है।

एक साधारण आरएनजी नाम KISS है , यह तीन नंबरों के अनुसार एक यादृच्छिक संख्या जनरेटर है।

 /* Implementation of a 32-bit KISS generator which uses no multiply instructions */ static unsigned int x=123456789,y=234567891,z=345678912,w=456789123,c=0; unsigned int JKISS32() { int t; y ^= (y<<5); y ^= (y>>7); y ^= (y<<22); t = z+w+c; z = w; c = t < 0; w = t&2147483647; x += 1411392427; return x + y + w; } 

इसके अलावा आरएनजी का परीक्षण करने के लिए एक वेब साइट है http://www.phy.duke.edu/~rgb/General/dieharder.php