পার্ক-মিলার র্যান্ডম নম্বর জেনারেশন অ্যালগরিদম (Park-Miller Random Number Generation Algorithm) র্যান্ডম সংখ্যা জেনারেট করার আরেকটি পদ্ধতি।
এই ধরনের র্যান্ডম নম্বর জেনারেটর (RNG)-র সাধারণ ফর্মুলা:
X_{k+1} = g X(k) mod n
যেখানে মডুলাস n হল একটি মৌলিক সংখ্যা বা মৌলিক সংখ্যার ঘাত, মাল্টিপ্লায়ার g হল n মডুলো উচ্চ গুণাত্মক ক্রমের একটি এলিমেন্ট, এবং সিড X₀ হল n-এর সাথে কো-প্রাইম।
অ্যালগরিদম
শুরু
n, a, b, c এবং seed ভেরিয়েবল ঘোষণা করুন
n, a, b, c এবং seed পড়ুন
Uniform()
hi, lo, t ভেরিয়েবল ঘোষণা করুন
hi = seed / b
lo = seed - b * hi
t = a * lo - c * hi
যদি (t > 0)
seed = t
অন্যথায়
seed = t + n
seed ফেরত দাও
শেষ
i = 0 থেকে n পর্যন্ত
random ফাংশন কল করুন
শেষ
শেষ
উদাহরণ কোড
#include <iostream>
using namespace std;
const long n = 2145678965L;
const long a = 763214L;
const long b = 88844L;
const long c = 7766L;
static long seed = 12345678L;
double uniform() {
long hi = seed / b;
long lo = seed - b * hi;
long t = a * lo - c * hi;
if (t > 0)
seed = t;
else
seed = t + n;
return seed;
}
int main(int argc, char **argv) {
double A[10];
for (int i = 0; i < 10; i++)
A[i] = uniform();
cout << "Random numbers are:\n";
for (int i = 0; i < 10; i++)
cout << A[i] << endl;
}
আউটপুট
Random numbers are: 6.50293e+10 4.27187e+10 2.1539e+10 4.62058e+10 1.70792e+10 8.24569e+09 5.93381e+10 3.63839e+10 4.81931e+10 8.91007e+09