मल्टीप्ली-विद-कैरी विधि मार्सग्लिया और ज़मान (1991) द्वारा पेश किए गए ऐड-विद-कैरी जनरेटर का एक प्रकार है। इस पद्धति का मुख्य लाभ यह है कि यह सरल कंप्यूटर पूर्णांक अंकगणित को आमंत्रित करता है और लगभग 260 से 22000000 तक की विशाल अवधि के साथ यादृच्छिक संख्याओं के अनुक्रमों की बहुत तेज़ पीढ़ी की ओर जाता है।
MWC आधार में b को कंप्यूटर शब्द आकार के बराबर चुना जाता है और गुणक a और lag r मापांक निर्धारित करते हैं p =ab r -1. यहाँ, a को चुना जाता है ताकि मापांक अभाज्य हो और गुणक की लंबी अवधि हो।
एल्गोरिदम
Begin Declare maximum _sequence _elements, b, r, c[maximum _sequence _elements], x[maximum _sequence _elements] Read the variables maximum _sequence _elements, b, r m = rand() mod b c[0] = rand() mod m x[0] = rand() mod b For I = 1 to maximum_sequence_element, do x[i] = (m * x[i - r] + c[i - 1]) mod b c[i] = (m * x[i - r] + c[i - 1]) / b print the sequence. Done. End.
उदाहरण कोड
#include <iostream> using namespace std; int main(int argc, char **argv) { int max_Seq_Elements = 7; int b = 300; int m = rand() % b; int r = 1; int c[max_Seq_Elements]; int x[max_Seq_Elements]; c[0] = rand() % m; x[0] = rand() % b; cout << "The random number sequence is: " << x[0]; for (int i = 1; i < max_Seq_Elements; i++) { x[i] = (m * x[i - r] + c[i - 1]) % b; c[i] = (m * x[i - r] + c[i - 1]) / b; cout << " " << x[i]; } cout << "..."; }
आउटपुट
The random number sequence is: 177 173 226 221 56 157 84...