मूल स्रोत `(बीज * 9301 + 49297)% 233280` यादृच्छिक एल्गोरिदम?


9

यदि आप एक अंकुरित (छद्म) रैंडम संख्या जनरेटर बनाने के उदाहरणों की खोज करते हैं, तो आप इस तरह से सामान में चलेंगे (विशिष्ट उदाहरण http://indiegamr.com/generate-repeatable-random-numbers-in-js/ ):

// the initial seed
Math.seed = 6;

// in order to work 'Math.seed' must NOT be undefined,
// so in any case, you HAVE to provide a Math.seed
Math.seededRandom = function(max, min) {
    max = max || 1;
    min = min || 0;

    Math.seed = (Math.seed * 9301 + 49297) % 233280;
    var rnd = Math.seed / 233280;

    return min + rnd * (max - min);
}

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


5
यह एक रेखीय संयोजक जनरेटर है, लेकिन काफी छोटी अवधि (केवल 233k के साथ, जबकि 32 बिट int में 4 बिलियन की अवधि की अनुमति है
शाफ़्ट फ्रीक

1
लोग अक्सर किताबों से सीधे कोड की नकल करते हैं, इसलिए यह शायद एक पुरानी किताब से कहीं है और इसे कई बार कॉपी किया गया है। यह एक सीमित मामला भी प्रतीत होता है। संभवत: उपयोगी: heydari.persiangig.com/Ebooks/Applied_Crypto-Ch11-ch20.pdf/... ict.griffith.edu.au/anthony/info/C/RandomNumbers
barrycarter

2
जो कुछ भी मूल है, वे एक बीज की गणना के लिए उपयोग करने के लिए भयानक मूल्य हैं।

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

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

जवाबों:


7

Google पुस्तकों की त्वरित खोज इन संख्याओं को दिखाती है (9301, 49297, 233280) को कई संदर्भों में उपयोग किया गया है:

  • फोरट्रान 77 में संख्यात्मक व्यंजनों
  • C ++ में न्यूमेरिकल मेथड्स का परिचय
  • CGI डेवलपर का संसाधन: TCL और PERL में वेब प्रोग्रामिंग
  • इंजीनियरों और वैज्ञानिकों के लिए प्रभावी फोरट्रान 77
  • जावास्क्रिप्ट विकास
  • सभी सी पर
  • संक्षेप में जावा उदाहरण
  • अर्धसूत्रीविभाजन एल्गोरिदम
  • यांत्रिकी का एक परिचय

1977 में जॉर्ज एल्मर फोर्सिथे, माइकल ए। मैल्कम, क्लेव बी। मोलर (अप्रेंटिस-हॉल) द्वारा गणितीय संगणना के लिए कंप्यूटर के सबसे पुराने तरीके हैं , हालांकि Google यह नहीं दिखाता है कि पुस्तक में पाठ का उपयोग कहां किया गया था, इसलिए इसे सत्यापित नहीं किया जा सकता है।

जल्द से जल्द पाठ दिखा रहा है पास्कल (प्रथम संस्करण) में न्यूमेरिकल रेसिपी: द आर्ट ऑफ़ साइंटिफिक कंप्यूटिंग , वॉल्यूम 1 द्वारा प्रेस, टेकोकोल्स्की, वेटेरलिंग और फ्लैनरी, "कॉन्स्टेंट्स ऑफ़ पोर्टेबल रैंडम नंबर जनरेटर्स" के एक फुल-पेज टेबल में। ये विशेष संख्याएँ 2 ^ 31 पर अतिप्रवाह के साथ दी जाती हैं।

पुस्तकों की न्यूमेरिकल रेसिपी श्रृंखला बेहद लोकप्रिय हैं, और 1986 से प्रिंट में हैं।


1
वाह, अगर जवाब यहाँ नहीं है, मुझे नहीं पता कि यह कहाँ होगा। धन्यवाद .. // मैं कुछ विशिष्ट शोधों को इंगित करने में सक्षम होने की उम्मीद कर रहा था जैसे कि ये संख्याएं विशेष क्यों हैं, लेकिन यह पर्याप्त है। 9301 दो प्राइम (71x131) का एक उत्पाद है, 49297 एक प्रमुख है - सहज रूप से मुझे लगता है कि यह प्रासंगिक होना चाहिए। 233280 अभाज्य नहीं है - यह 2x2x2x2x2x2x2x3x3x3x3x3x3x3x5 (या 2 ^ 6 * 3 ^ 5 * 5) के
बराबर होता है
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.