मर्सेन ट्विस्टर: Difference between revisions
(→विकल्प) |
|||
Line 162: | Line 162: | ||
=== आरंभीकरण === | === आरंभीकरण === | ||
मेर्सन ट्विस्टर कार्यान्वयन के लिए आवश्यक स्थिति प्रत्येक डब्ल्यू बिट्स के एन मानों की एक सरणी है। सरणी को प्रारंभ करने के लिए, | मेर्सन ट्विस्टर कार्यान्वयन के लिए आवश्यक स्थिति प्रत्येक डब्ल्यू बिट्स के एन मानों की एक सरणी है। सरणी को प्रारंभ करने के लिए, एक w-बिट बीज मान का उपयोग किया जाता है तथा <math>x_0</math> द्वारा <math>x_{n-1}</math> व्यवस्थित करके <math>x_0</math> बीज मान और उसके बाद निम्नलिखित को | ||
: <math> | : <math> | ||
x_i = f \times (x_{i-1} \oplus (x_{i-1} \gg (w-2))) + i | x_i = f \times (x_{i-1} \oplus (x_{i-1} \gg (w-2))) + i | ||
</math> | </math> | ||
के लिए <math>i</math> से <math>1</math> को <math>n-1</math> | के लिए <math>i</math> से <math>1</math> को <math>n-1</math> के रूप में संयोजित किया जाता है। | ||
* विधिकलन द्वारा उत्पन्न पहला मान | * विधिकलन द्वारा उत्पन्न पहला मान <math>x_n</math> उस पर आधारित होता है न की <math>x_0</math> पर। | ||
* स्थिरांक f उत्पन्नक के लिए एक और | * स्थिरांक f उत्पन्नक के लिए एक और मापदंड निर्मित करता है, यद्यपि यह विधिकलन का उचित भाग नहीं है। | ||
* MT19937 के लिए f का मान 1812433253 है। | * MT19937 के लिए f का मान 1812433253 है। | ||
* MT19937-64 के लिए f का मान 6364136223846793005 है।<ref name="std::mersenne_twister_engine" /> | * MT19937-64 के लिए f का मान 6364136223846793005 है।<ref name="std::mersenne_twister_engine" /> | ||
=== | === पारंपरिक जीएफएसआर के साथ तुलना === | ||
हासिल करने के लिए <math>2^{nw-r}-1</math> टी[[जीएफएसआर]] में अवधि की सैद्धांतिक ऊपरी सीमा, <math>\phi_{B}(t)</math> एक [[आदिम बहुपद (क्षेत्र सिद्धांत)]] होना चाहिए, <math>\phi_{B}(t)</math> का अभिलक्षणिक बहुपद होना | हासिल करने के लिए <math>2^{nw-r}-1</math> टी[[जीएफएसआर]] में अवधि की सैद्धांतिक ऊपरी सीमा, <math>\phi_{B}(t)</math> एक [[आदिम बहुपद (क्षेत्र सिद्धांत)]] होना चाहिए, <math>\phi_{B}(t)</math> का अभिलक्षणिक बहुपद होना | ||
Revision as of 00:57, 2 July 2023
मर्सेन ट्विस्टर एक साधारण-उद्देश्य प्रतीतिसंद्ध संख्या उत्पन्नक (पीआरएनजी) है जिसे 1997 में मकोतो मकोतो मत्सुमोटो (松本 眞) और ताकुजी निशिमुरा (西村 拓士) द्वारा विकसित किया गया था।[1][2] इसका नाम इस तथ्य से प्राप्त होता है कि इसकी अवधि की लंबाई को मर्सेन प्रधान संख्या के रूप में चुना जाता है।
मेर्सन ट्विस्टर को विशेष रूप से पुराने पीआरएनजी में पाई गई अधिकांश त्रुटियों को दूर करने के लिए प्ररूपित किया गया था।
मेर्सन ट्विस्टर विधिकलन का सबसे अधिक उपयोग किया जाने वाला संस्करण मेर्सन प्राइम पर आधारित है। इसका मानक कार्यान्वयन, MT19937, 32-बिट शब्द लंबाई का उपयोग करता है। इसके अतिरिक्त एक और कार्यान्वयन MT19937-64 है[3] जो 64-बिट शब्द लंबाई, का उपयोग करता है। यह एक भिन्न अनुक्रम उत्पन्न करता है।
अनुप्रयोग
सॉफ्टवेयर
निम्नलिखित सॉफ्टवेयर द्वारा मेर्सन ट्विस्टर का उपयोग डिफ़ॉल्ट पीआरएनजी के रूप में किया जाता है:
- प्रोग्रामिंग भाषाएँ: डायलोग एपीएल,[4] आईडीएल,[5] आर,[6] रूबी,[7] फ़्री पास्कल,[8] पीएचपी,[9] पायथन (नमपाइ भी मर्सेन ट्विस्टर का उपयोग करता है, परंतु संस्करण 1.17 से पूर्व इसको डिफ़ॉल्ट यादृच्छिक संख्या उत्पन्नक के रूप में परिवर्तित कर दिया गया था।[10]),[11][12][13] सीएमयू कॉमन लिस्प,[14] एंबेडेबल कॉमन लिस्प,[15] स्टील बैंक कॉमन लिस्प,[16] जूलिया (जूलिया 1.6 एलटीएस तक, यह मर्सेन ट्विस्टर उपलब्ध था, परंतु 1.7 के उपरांत डिफ़ॉल्ट यादृच्छिक संख्या उत्पन्नक के रूप में एक बेहतर/तेज़ आरएनजी का उपयोग किया जाता है।[17]
- लिनक्स लाइब्रेरी और सॉफ्टवेयर: जीएलआईबी,[18] जीएनयू एकाधिक परिशुद्धता अंकगणित लाइब्रेरी,[19] जीएनयू ऑक्टेव,[20] जीएनयू साइंटिफिक लाइब्रेरी[21]
- अन्य: माइक्रोसॉफ्ट एक्सेल ,[22] गॉस,[23] ग्रेटल[24] स्टेटा,[25] सेजमैथ,[26] साइलैब,[27] मेपल,[28] मैटलैब[29]
यह अपाचे कॉमन्स में,[30] मानक C++ लाइब्रेरी में (C++11 के उपरांत),[31][32] और मैथेमैटिका में[33] भी उपलब्ध है। बूस्ट सी++ लाइब्रेरी सहित कई प्रोग्राम लाइब्रेरी जैसे सीयूडीए,[34] और एनएजी न्यूमेरिकल लाइब्रेरी[35]में इसके युग्मित कार्यान्वयन प्रदान किए जाते हैं।[36]
एसपीएसएस में मेर्सन ट्विस्टर, दो पीआरएनजी में से एक है: अन्य उत्पन्नक केवल पुराने प्रोग्रामों के साथ संगतता हेतु रखा गया है, और मर्सेन ट्विस्टर को "अधिक विश्वसनीय" घोषित किया जाता है।[37] मेर्सन ट्विस्टर इसी तरह एसएएस में विभिन्न पीआरएनजी में से एक है: अन्य उत्पन्नक पुराने और अप्रचलित हैं।[38] मेर्सन ट्विस्टर स्टाटा में डिफ़ॉल्ट पीआरएनजी है, दूसरा स्टाटा के पुराने संस्करणों के साथ संगतता के लिए केआइएसएस विधिकलन का उपयोग किया जाता है।[39]
लाभ
- क्रिप्टएमटी के अतिरिक्त मेर्सन ट्विस्टर, सभी संस्करणों के लिए अनुमेय-लाइसेंसीकृत और पेटेंट-मुक्त है।
- मर्सेन ट्विस्टर सांख्यिकीय यादृच्छिकता के लिए कई परीक्षणों, जैसे डाइहार्ड परीक्षण और अधिकांश TestU01 परीक्षणों, को पार करता है। यद्यपि, यह सभी TestU01 परीक्षणों को पूरा नहीं करता है।।[40]
- बहुत लम्बी अवधि . ध्यान दें कि यद्यपि लंबी अवधि यादृच्छिक संख्या उत्पन्नक में गुणवत्ता की गारंटी नहीं है, छोटी अवधि, जैसे कि कई पुराने सॉफ़्टवेयर पैकेजों में सामान्य, समस्याग्रस्त हो सकता है।[41]
- प्रत्येक के लिए k-वितरण 32-बिट सटीकता को समर्थित करता है।
- कार्यान्वयन सामान्यतः हार्डवेयर-कार्यान्वित विधियों की तुलना में तेजी से यादृच्छिक संख्याएं निर्मित करता है। एक अध्ययन में पाया गया कि मेर्सन ट्विस्टर हार्डवेयर-कार्यान्वित, प्रोसेसर-आधारित आरडीरैंड निर्देश समुच्चय की तुलना में लगभग बीस गुना तेजी से 64-बिट फ़्लोटिंग पॉइंट यादृच्छिक संख्याएँ निर्मित करता है।[42]
हानि
- 2.5 KiB का अपेक्षाकृत बड़ा स्टेट बफर, जब तक कि टाइनीएमटी संस्करण का उपयोग नहीं किया जाता है।
- आधुनिक मानकों के अनुसार औसत श्रेणी का थ्रूपुट, जब तक कि एसएफएमटी संस्करण का उपयोग नहीं किया जाता है।[43]
- TestU01 सुइट में क्रश और बिगक्रश दोनों में दो स्पष्ट विफलताएं प्रदर्शित होती हैं। मेर्सन ट्विस्टर की तरह परीक्षण, एक -बीजगणित पर आधारित है।[40]* कई उदाहरण जो केवल बीजगणितीय मानों में भिन्न होते हैं, सामान्यतः मोंटे कार्लो सिमुलेशन के लिए उपयुक्त नहीं होते हैं। मोंटे-कार्लो सिमुलेशन के लिए स्वतंत्र यादृच्छिक संख्या उत्पन्नक की आवश्यकता होती है, यद्यपि पैरामीटर मानों के कई समुच्चयों को चुनने के लिए एक विधि उपलब्ध है।[44][45]
- खराब प्रसार: यदि प्रारंभिक स्थिति अत्यधिक गैर-यादृच्छिक है - विशेषकर यदि प्रारंभिक स्थिति में कई शून्य हैं तो यादृच्छिकता परीक्षण उत्तीर्ण करने वाले आउटपुट को उत्पन्न करने में लंबा समय लग सकता है। इसका एक परिणाम यह है कि उत्पन्नक के दो उदाहरण, प्रारंभिक अवस्थाओं के साथ प्रारंभ हुए जो लगभग समान हैं, सामान्यतः अंततः अलग होने से पहले, कई पुनरावृत्तियों के लिए लगभग समान अनुक्रम का उत्पादन करते हैं। एमटी विधिकलन के लिए 2002 के अपडेट ने आरंभीकरण में सुधार किया है, इसलिए ऐसी स्थिति के साथ प्रारंभ करना असंभव है।[46] जीपीयू संस्करण एमटीजीपी को और भी बेहतर बताया गया है।[47]
- इसमें 1 से अधिक 0 वाले अनुवर्ती सम्मिलित हैं। इससे कई-शून्य स्टेट से पुनर्प्राप्ति को कठिन बनाने के लिए खराब प्रसार गुण युग्मित हो जाता है।
- यदि क्रिप्टएमटी संस्करण का उपयोग नहीं किया जाता है तो मर्सेन ट्विस्टर कैरिप्टोग्राफिकली सुरक्षित नहीं होता है। कारण यह है कि पर्याप्त संख्या के आवर्तनों की पर्यवेक्षण (MT19937 के परिप्रेक्ष्य में 624, क्योंकि इससे भविष्य के आवर्तन उत्पन्न होते हैं) से भविष्य के सभी आवर्तनों की पूर्वानुमान करने में सक्षम हो जाता है।
विकल्प
एक वैकल्पिक उत्पन्नक, वेल त्वरित पुनर्प्राप्ति, समान यादृच्छिकता और लगभग समान गति प्रदान करता है।[48]
मार्साग्लिया के एक्सओआर शिफ्ट उत्पन्नक और उनके संस्करण, एलएफएसआर की श्रेणी में सबसे तेज़ हैं।[49]
64-बिट एमईएलजी, के-वितरण गुणों के संदर्भ में पूरी तरह से अनुकूलित हैं।[50]
ऐकॉर्न, जिसका प्रकाशन 1989 मे हुआ था एक और के-वितरित पीआरएनजी है, जो एमटी के समान संगणन गति और बेहतर सांख्यिकीय गुण प्रदर्शित करता है क्योंकि यह सभी उपलब्ध (2019) TestU01 मानदंडों को पूरा करता है; जब मापदंडों के उचित विकल्पों के साथ उपयोग किया जाता है, तो ऐकॉर्न में लंबी अवधि और सटीकता हो सकती है।
पीसीजी परिवार उत्पन्नक, अधिक आधुनिक लंबी अवधि वाला उत्पन्नक है, जिसमें बेहतर कैश स्थानीयता और आधुनिक विश्लेषण विधियों का उपयोग करने वाले पूर्वाग्रह प्रत्यक्ष नहीं है।[51]
के-वितरण
एक w-बिट पूर्वनिर्धारित अनुक्रम जिसकी अवधि P है, को v-बिट की सटीकता तक k-वितरित माना जाता है यदि निम्नलिखित समीकरण सत्य होता है।
- प्राथमिक v बिटों द्वारा गठित संख्या x को truncv(x) से चिह्नित किया जाता है, और k v-बिट सदिशों को P द्वारा चिन्हित किया जाता है तोː
- .
- तो पूर्ण-शून्य संयोजन को छोड़कर प्रत्येक बिट्स का संभावित संयोजन एक अवधि में समान संख्या में होता है, जो एक बार न्यूनतम होता है।
विधिकलन विवरण
डब्ल्यू-बिट शब्द लंबाई के लिए, मेर्सन ट्विस्टर श्रेणी में पूर्णांक उत्पन्न करता है .
मेर्सन ट्विस्टर विधिकलन एक परिमित द्विआधारी अंक प्रणाली क्षेत्र पर पुनरावृत्ति संबंध पर आधारित है। विधिकलन एक व्यावर्तित सामान्यीकृत फीडबैक शिफ्ट रजिस्टर है[52] मूल विचार है की किसी श्रृंखला को एक सरल पुनरावृत्ति संबंध के माध्यम से परिभाषित करना है, और फिर फॉर्म की आउटपुट संख्याएँ , जहां T एक व्युत्क्रमणीय -आव्यूह है जिसे विवर्तित प्रतिनिधित्व कहा जाता है।
सामान्य विधिकलन को निम्नलिखित मात्राओं द्वारा दर्शाया जाता है (इनमें से कुछ स्पष्टीकरण शेष विधिकलन को पढ़ने के बाद ही समझ में आते हैं):
- w: शब्द का आकार (बिट्स की संख्या में)
- एन: पुनरावृत्ति की श्रेणी
- एम: मध्य शब्द, श्रृंखला को परिभाषित करने वाले पुनरावृत्ति संबंध में प्रयुक्त एक ऑफसेट ,
- आर: एक शब्द का पृथक्करण बिंदु, या निचले बिटमास्क के बिट्स की संख्या,
- ए: तर्कसंगत सामान्य रूप ट्विस्ट आव्यूह के गुणांक
- बी, सी: टीजीएफएसआर (आर) विवर्तन बिटमास्क
- एस, टी: टीजीएफएसआर (आर) विवर्तन बिट शिफ्ट
- यू, डी, एल: अतिरिक्त मेर्सन ट्विस्टर विवर्तन बिट शिफ्ट/मास्क
उस प्रतिबंध के साथ एक मेरसेन प्राइम है। यह विकल्प आदिमता परीक्षण और k-वितरण परीक्षण को सरल निर्मित बनाता है जो पैरामीटर खोज में आवश्यक हैं।
श्रृंखला पुनरावृत्ति संबंध के साथ डब्ल्यू-बिट मात्राओं की एक श्रृंखला के रूप में परिभाषित किया गया है:
जहाँ बिट सदिशों के संयोजन को दर्शाता है (बाईं ओर ऊपरी बिट्स के साथ), बिटवाइज़ एकमात्र (XOR), अर्थात ऊपरी w − r का , और का अर्थ निम्न आर बिट्स है . विवर्त परिवर्तन ए को तर्कसंगत सामान्य रूप में परिभाषित किया गया है:
टीजीएफएसआर (आर) के समान, मेर्सन ट्विस्टर को समान वितरण की कम आयामीता की भरपाई के लिए एक टेम्पर्ड प्रतिनिधित्व के साथ कैस्केड किया गया है। ध्यान दें कि यह आव्यूह ए का उपयोग करने के समान है टी के लिए एक व्युत्क्रम आव्यूह, और इसलिए नीचे उल्लिखित विशेषता बहुपद का विश्लेषण अभी भी मान्य है।
ए के साथ, हम सरलता से गणना करने योग्य होने के लिए एक विवर्तन परिवर्तन चुनते हैं, और इसलिए वास्तव में टी का निर्माण नहीं करते हैं। मेर्सन ट्विस्टर के परिप्रेक्ष्य में आव्यूह को इस प्रकार परिभाषित किया गया है
जहाँ श्रृंखला से अगला मान है, एक अस्थायी मध्यवर्ती मान है, और एल्गोरिथ्म से और बिट-शिफ्ट के रूप में, और बिटवाइज तार्किक संयोजन के रूप में लौटाया गया मान है । निचले-बिट समवितरण को बेहतर बनाने के लिए पहला और आखिरी परिवर्तन जोड़ा जाता है। टीजीएफएसआर के गुण से, ऊपरी बिट्स के लिए समवितरण की ऊपरी सीमा तक पहुंचना आवश्यक है।
MT19937 के लिए गुणांक हैं:
ध्यान दें कि मेर्सन ट्विस्टर के 32-बिट कार्यान्वयन में सामान्यतः d = FFFFFFFF16 होता है. परिणामस्वरूप, कभी-कभी डी को विधिकलन विवरण से हटा दिया जाता है, क्योंकि उस स्थिति में डी के साथ बिटवाइज़ तार्किक संयोजन का कोई प्रभाव नहीं पड़ता है।
MT19937-64 के लिए गुणांक हैं:[53]
आरंभीकरण
मेर्सन ट्विस्टर कार्यान्वयन के लिए आवश्यक स्थिति प्रत्येक डब्ल्यू बिट्स के एन मानों की एक सरणी है। सरणी को प्रारंभ करने के लिए, एक w-बिट बीज मान का उपयोग किया जाता है तथा द्वारा व्यवस्थित करके बीज मान और उसके बाद निम्नलिखित को
के लिए से को के रूप में संयोजित किया जाता है।
- विधिकलन द्वारा उत्पन्न पहला मान उस पर आधारित होता है न की पर।
- स्थिरांक f उत्पन्नक के लिए एक और मापदंड निर्मित करता है, यद्यपि यह विधिकलन का उचित भाग नहीं है।
- MT19937 के लिए f का मान 1812433253 है।
- MT19937-64 के लिए f का मान 6364136223846793005 है।[53]
पारंपरिक जीएफएसआर के साथ तुलना
हासिल करने के लिए टीजीएफएसआर में अवधि की सैद्धांतिक ऊपरी सीमा, एक आदिम बहुपद (क्षेत्र सिद्धांत) होना चाहिए, का अभिलक्षणिक बहुपद होना
ट्विस्ट परिवर्तन निम्नलिखित प्रमुख गुणों के साथ शास्त्रीय जीएफएसआर में सुधार करता है:
- अवधि सैद्धांतिक ऊपरी सीमा तक पहुँचती है (सिवाय यदि 0 से प्रारंभ किया गया हो)
- एन आयामों में समान वितरण (उदाहरण के लिए रैखिक सर्वांगसम उत्पन्नक पांच आयामों में उचित वितरण का सर्वोत्तम प्रबंधन कर सकता है)
स्यूडोकोड
निम्नलिखित छद्मकोड सामान्य मेर्सन ट्विस्टर एल्गोरिथ्म को लागू करता है। स्थिरांक w, n, m, r, a, u, d, s, b, t, c, l, और f उपरोक्त विधिकलन विवरण के अनुसार हैं। यह माना जाता है कि int w बिट्स के साथ मान रखने के लिए पर्याप्त प्रकार का प्रतिनिधित्व करता है:
// उत्पन्नक की स्थिति को संग्रहीत करने के लिए एक लंबाई एन सरणी बनाएं int[0..n-1] एमटी पूर्णांक सूचकांक�:= n+1 const int low_mask = (1 << r) - 1 // अर्थात, r 1 की द्विआधारी संख्या स्थिरांक पूर्णांक ऊपरी_मास्क = निम्नतम डब्ल्यू बिट्स (बिटवाइज़ ऑपरेशन # लोअर_मास्क नहीं) // एक बीज से उत्पन्नक आरंभ करें फ़ंक्शन सीड_एमटी(इंट सीड) { सूचकांक�:= एन एमटी[0][:= बीज i के लिए 1 से (n - 1) तक { // प्रत्येक तत्व पर लूप MT[i]]:= न्यूनतम w बिट्स (f * (MT[i-1] बिटवाइज़ ऑपरेशन#XOR (MT[i-1] >> (w-2))) + i) } } // एमटी[सूचकांक] के आधार पर एक टेम्पर्ड मान निकालें // प्रत्येक n संख्या में ट्विस्ट() को कॉल करना फ़ंक्शन एक्सट्रेक्ट_नंबर() { यदि सूचकांक >= n { यदि सूचकांक > n { त्रुटि जेनरेटर कभी भी सीड नहीं किया गया था //वैकल्पिक रूप से, स्थिर मान वाला बीज; 5489 का उपयोग संदर्भ सी कोड में किया जाता है[54]} मोड़() } 'int' yt:= MT[सूचकांक] y := y 'बिटवाइज़ ऑपरेशन#XOR' ((y >> 'u') 'बिटवाइज़ ऑपरेशन#AND' 'd') y := y 'बिटवाइज़ ऑपरेशन#XOR' ((y << 's') 'बिटवाइज़ ऑपरेशन#AND' 'b') y := y 'बिटवाइज़ ऑपरेशन#XOR' ((y << 't') 'बिटवाइज़ ऑपरेशन#AND' 'c') y := y 'बिटवाइज़ ऑपरेशन#XOR' (y >> 'l') सूचकांक�:= सूचकांक + 1 (y) के निम्नतम 'w' बिट्स 'वापसी' करें } // श्रृंखला x_i से अगले n मान उत्पन्न करें 'फ़ंक्शन' ट्विस्ट() { 'के लिए' मैं 'से' 0 'से' ('एन'-1) { 'int' x := (MT[i] 'बिटवाइज़ ऑपरेशन#AND' अपर_मास्क) | (एमटी[(i+1) 'मोडुलो ऑपरेशन' 'एन'] 'बिटवाइज़ ऑपरेशन#और' लोअर_मास्क) 'int' xAA:= x >> 1 'if' (x 'मोडुलो ऑपरेशन' 2)2!= 0 {// x का निम्नतम बिट 1 है xA := xA 'बिटवाइज़ ऑपरेशन#XOR' 'a' } MT[i]M:= MT[(i + 'm') 'मोडुलो ऑपरेशन' 'n'] 'बिटवाइज़ ऑपरेशन#XOR' xA } सूचकांक�:= 0 }
वेरिएंट
क्रिप्टएमटी
CryptMT एक धारा सिफर और क्रिप्टोग्राफ़िक रूप से सुरक्षित छद्म यादृच्छिक संख्या उत्पन्नक है जो आंतरिक रूप से मेर्सन ट्विस्टर का उपयोग करता है।[55][56] इसे मात्सुमोतो और निशिमुरा ने मारिको हागिटा और मुत्सुओ सैतो के साथ मिलकर विकसित किया था। इसे eCRYPT नेटवर्क के eSTREAM प्रोजेक्ट में सबमिट किया गया है।[55]मेर्सन ट्विस्टर या इसके अन्य डेरिवेटिव के विपरीत, क्रिप्टएमटी सॉफ्टवेयर पेटेंट है।
एमटीजीपी
एमटीजीपी मुत्सुओ सैटो और माकोतो मात्सुमोतो द्वारा प्रकाशित ग्राफ़िक्स प्रोसेसिंग युनिट के लिए अनुकूलित मेर्सन ट्विस्टर का एक प्रकार है।[57] बुनियादी रैखिक पुनरावृत्ति संचालन को एमटी से बढ़ाया जाता है और मेमोरी लोड को कम करने के लिए अपने राज्य स्थान को साझा करते हुए, समानांतर में पुनरावृत्ति की गणना करने के लिए कई थ्रेड्स को अनुमति देने के लिए पैरामीटर चुने जाते हैं। पेपर में एमटी पर समान वितरण में सुधार और 5×10 के लिए 4.7 एमएस के बहुत पुराने जीपीयू (192 कोर के साथ एNVIDIA जीटीएक्स260) पर प्रदर्शन का दावा किया गया है।7यादृच्छिक 32-बिट पूर्णांक।
सुफ़ा
{{Expand section|date=June 2007}एसएफएमटी (एकल निर्देश, एकाधिक डेटा-उन्मुख फास्ट मेर्सन ट्विस्टर) मेर्सन ट्विस्टर का एक प्रकार है, जिसे 2006 में पेश किया गया था।[58] 128-बिट SIMD पर चलने पर इसे तेज़ बनाने के लिए डिज़ाइन किया गया है।
- यह मेरसेन ट्विस्टर से लगभग दोगुना तेज़ है।[59]
- इसमें एमटी की तुलना में वी-बिट सटीकता की बेहतर समान वितरण संपत्ति है, लेकिन वेल इक्विडिस्ट्रिब्यूटेड लॉन्ग-पीरियड लीनियर | वेल (वेल इक्विडिस्ट्रिब्यूटेड लॉन्ग-पीरियड लीनियर) से भी बदतर है।
- इसमें MT की तुलना में शून्य-अतिरिक्त प्रारंभिक अवस्था से त्वरित पुनर्प्राप्ति होती है, लेकिन WELL की तुलना में धीमी होती है।
- यह 2 से विभिन्न अवधियों का समर्थन करता है607- 1 से 2216091--1.
Intel SSE2 और PowerPC AltiVec SFMT द्वारा समर्थित हैं। इसका उपयोग PlayStation 3 में सेल (माइक्रोप्रोसेसर) वाले गेम के लिए भी किया जाता है।[60]
टाइनीएमटी
टाइनीएमटी मेरसेन ट्विस्टर का एक प्रकार है, जिसे 2011 में सैटो और मात्सुमोतो द्वारा प्रस्तावित किया गया था।[61] TinyMT केवल 127 बिट्स स्टेट स्पेस का उपयोग करता है, जो मूल स्टेट के 2.5 KiB की तुलना में एक महत्वपूर्ण कमी है। यद्यपि, इसकी एक अवधि होती है , मूल से बहुत छोटा है, इसलिए लेखकों द्वारा इसकी अनुशंसा केवल उन मामलों में की जाती है जहां मेमोरी प्रीमियम पर है।
संदर्भ
- ↑ Matsumoto, M.; Nishimura, T. (1998). "Mersenne twister: a 623-dimensionally equidistributed uniform pseudo-random number generator" (PDF). ACM Transactions on Modeling and Computer Simulation. 8 (1): 3–30. CiteSeerX 10.1.1.215.1141. doi:10.1145/272991.272995. S2CID 3332028.
- ↑ E.g. Marsland S. (2011) Machine Learning (CRC Press), §4.1.1. Also see the section "Adoption in software systems".
- ↑ John Savard. "मेर्सन ट्विस्टर".
A subsequent paper, published in the year 2000, gave five additional forms of the Mersenne Twister with period 2^19937-1. All five were designed to be implemented with 64-bit arithmetic instead of 32-bit arithmetic.
- ↑ "यादृच्छिक लिंक". Dyalog Language Reference Guide. Retrieved 2020-06-04.
- ↑ "रैंडोमू (आईडीएल संदर्भ)". Exelis VIS Docs Center. Retrieved 2013-08-23.
- ↑ "यादृच्छिक संख्या जेनरेटर". CRAN Task View: Probability Distributions. Retrieved 2012-05-29.
- ↑ ""यादृच्छिक" वर्ग दस्तावेज़ीकरण". Ruby 1.9.3 documentation. Retrieved 2012-05-29.
- ↑ "रैंडम". free pascal documentation. Retrieved 2013-11-28.
- ↑ "mt_rand — Generate a better random value". PHP Manual. Retrieved 2016-03-02.
- ↑ "NumPy 1.17.0 Release Notes — NumPy v1.21 Manual". numpy.org. Retrieved 2021-06-29.
- ↑ "9.6 random — Generate pseudo-random numbers". Python v2.6.8 documentation. Retrieved 2012-05-29.
- ↑ "8.6 random — Generate pseudo-random numbers". Python v3.2 documentation. Retrieved 2012-05-29.
- ↑ "random — Generate pseudo-random numbers — Python 3.8.3 documentation". Python 3.8.3 documentation. Retrieved 2020-06-23.
- ↑ "डिज़ाइन विकल्प और एक्सटेंशन". CMUCL User's Manual. Retrieved 2014-02-03.
- ↑ "यादृच्छिक अवस्थाएँ". The ECL manual. Retrieved 2015-09-20.
- ↑ "यादृच्छिक संख्या सृजन". SBCL User's Manual.
- ↑ "Random Numbers · The Julia Language". docs.julialang.org. Retrieved 2022-06-21.
- ↑ "Random Numbers: GLib Reference Manual".
- ↑ "यादृच्छिक संख्या एल्गोरिदम". GNU MP. Retrieved 2013-11-21.
- ↑ "16.3 Special Utility Matrices". GNU Octave.
Built-in Function: rand
- ↑ "यादृच्छिक संख्या पर्यावरण चर". GNU Scientific Library. Retrieved 2013-11-24.
- ↑ Mélard, G. (2014), "On the accuracy of statistical procedures in Microsoft Excel 2010", Computational Statistics, 29 (5): 1095–1128, CiteSeerX 10.1.1.455.5508, doi:10.1007/s00180-014-0482-5, S2CID 54032450.
- ↑ "GAUSS 14 Language Reference" (PDF).
- ↑ "uniform". Gretl Function Reference.
- ↑ "New random-number generator—64-bit Mersenne Twister".
- ↑ "Probability Distributions — Sage Reference Manual v7.2: Probablity".
- ↑ "भव्य - यादृच्छिक संख्याएँ". Scilab Help.
- ↑ "रैंडम संख्या जनरेटर". Maple Online Help. Retrieved 2013-11-21.
- ↑ "यादृच्छिक संख्या जनरेटर एल्गोरिदम". Documentation Center, MathWorks.
- ↑ "डेटा जनरेशन". Apache Commons Math User Guide.
- ↑ "C++11 में यादृच्छिक संख्या सृजन" (PDF). Standard C++ Foundation.
- ↑ "std::mersenne_twister_engine". Pseudo Random Number Generation. Retrieved 2012-09-25.
- ↑ [1] Mathematica Documentation
- ↑ "होस्ट एपीआई अवलोकन". CUDA Toolkit Documentation. Retrieved 2016-08-02.
- ↑ "G05 – Random Number Generators". NAG Library Chapter Introduction. Retrieved 2012-05-29.
- ↑ "boost/random/mersenne_twister.hpp". Boost C++ Libraries. Retrieved 2012-05-29.
- ↑ "यादृच्छिक संख्या जेनरेटर". IBM SPSS Statistics. Retrieved 2013-11-21.
- ↑ "यादृच्छिक-संख्या फ़ंक्शंस का उपयोग करना". SAS Language Reference. Retrieved 2013-11-21.
- ↑ Stata help: set rng -- Set which random-number generator (RNG) to use
- ↑ 40.0 40.1 P. L'Ecuyer and R. Simard, "TestU01: "A C library for empirical testing of random number generators", ACM Transactions on Mathematical Software, 33, 4, Article 22 (August 2007).
- ↑ Note: 219937 is approximately 4.3 × 106001; this is many orders of magnitude larger than the estimated number of particles in the observable universe, which is 1087.
- ↑ Route, Matthew (August 10, 2017). "रेडियो-फ्लेयरिंग अल्ट्राकूल बौना जनसंख्या संश्लेषण". The Astrophysical Journal. 845 (1): 66. arXiv:1707.02212. Bibcode:2017ApJ...845...66R. doi:10.3847/1538-4357/aa7ede. S2CID 118895524.
- ↑ "SIMD-oriented Fast Mersenne Twister (SFMT): twice faster than Mersenne Twister". Japan Society for the Promotion of Science. Retrieved 27 March 2017.
- ↑ Makoto Matsumoto; Takuji Nishimura. "छद्म यादृच्छिक संख्या जेनरेटर का गतिशील निर्माण" (PDF). Retrieved 19 July 2015.
- ↑ Hiroshi Haramoto; Makoto Matsumoto; Takuji Nishimura; François Panneton; Pierre L'Ecuyer. "Efficient Jump Ahead for F2-Linear Random Number Generators" (PDF). Retrieved 12 Nov 2015.
- ↑ "mt19937ar: Mersenne Twister with improved initialization". hiroshima-u.ac.jp. Retrieved 4 October 2015.
- ↑ Fog, Agner (1 May 2015). "वेक्टर प्रोसेसर और मल्टीकोर प्रोसेसर के लिए छद्म-यादृच्छिक संख्या जेनरेटर". Journal of Modern Applied Statistical Methods. 14 (1): 308–334. doi:10.22237/jmasm/1430454120.
- ↑ P. L'Ecuyer, "Uniform Random Number Generators", International Encyclopedia of Statistical Science, Lovric, Miodrag (Ed.), Springer-Verlag, 2010.
- ↑ "xorshift*/xorshift+ generators and the PRNG shootout".
- ↑ Harase, S.; Kimoto, T. (2018). "Implementing 64-bit Maximally Equidistributed F2-Linear Generators with Mersenne Prime Period". ACM Transactions on Mathematical Software. 44 (3): 30:1–30:11. arXiv:1505.06582. doi:10.1145/3159444. S2CID 14923086.
- ↑ "पीसीजी पेपर". 27 July 2017.
- ↑ Matsumoto, M.; Kurita, Y. (1992). "मुड़े हुए जीएफएसआर जनरेटर". ACM Transactions on Modeling and Computer Simulation. 2 (3): 179–194. doi:10.1145/146382.146383. S2CID 15246234.
- ↑ 53.0 53.1 "std::mersenne_twister_engine". Pseudo Random Number Generation. Retrieved 2015-07-20.
- ↑ Takuji Nishimura; Makoto Matsumoto. "A C-program for MT19937, with initialization improved 2002/1/26". Retrieved 20 July 2015.
- ↑ 55.0 55.1 "क्रिप्टएमटी और फ़ुबुकी". eCRYPT. Retrieved 2017-11-12.
- ↑ Matsumoto, Makoto; Nishimura, Takuji; Hagita, Mariko; Saito, Mutsuo (2005). "Cryptographic Mersenne Twister and Fubuki Stream/Block Cipher" (PDF).
- ↑ Mutsuo Saito; Makoto Matsumoto (2010). "मेरसेन ट्विस्टर के वेरिएंट ग्राफिक प्रोसेसर के लिए उपयुक्त हैं". arXiv:1005.4973v3 [cs.MS].
- ↑ "SIMD-उन्मुख फास्ट मेरसेन ट्विस्टर (SFMT)". hiroshima-u.ac.jp. Retrieved 4 October 2015.
- ↑ "SFMT:Comparison of speed". hiroshima-u.ac.jp. Retrieved 4 October 2015.
- ↑ "PlayStation3 License". scei.co.jp. Retrieved 4 October 2015.
- ↑ "टिनी मेरसेन ट्विस्टर (टिनीएमटी)". hiroshima-u.ac.jp. Retrieved 4 October 2015.
अग्रिम पठन
- Harase, S. (2014), "On the -linear relations of Mersenne Twister pseudorandom number generators", Mathematics and Computers in Simulation, 100: 103–113, arXiv:1301.5435, doi:10.1016/j.matcom.2014.02.002, S2CID 6984431.
- Harase, S. (2019), "Conversion of Mersenne Twister to double-precision floating-point numbers", Mathematics and Computers in Simulation, 161: 76–83, arXiv:1708.06018, doi:10.1016/j.matcom.2018.08.006, S2CID 19777310.
बाहरी संबंध
- The academic paper for MT, and related articles by Makoto Matsumoto
- Mersenne Twister home page, with codes in C, Fortran, Java, Lisp and some other languages
- Mersenne Twister examples — a collection of Mersenne Twister implementations, in several programming languages - at GitHub
- SFMT in Action: Part I – Generating a DLL Including SSE2 Support – at Code Project