实现 Park-Miller 随机数生成算法的 C++ 程序

Park-Miller 随机数生成算法是另一种生成随机数的方法。

这种类型的随机数生成器 (RNG) 的一般公式是: X_{k+1} = g X(k)mod n

在模数 n 是素数或素数的幂的情况下,乘数 g 是高乘法阶模 n 的元素,并且种子 X0 与 n 互质。

算法

Begin

   Declare variables n, a, b, c and seed

   Read variables n, a, b, c and seed

   Uniform()

   Declare variable hi, lo, t

   hi=seed divided by b

   lo = seed - b * hi

   t = a * lo - c * hi

   if (t > 0)

      seed = t;

   else

      seed = t + n;

      return seed;

   Done

   For i =0 to n

      Call the function random

   Done

End

示例代码

#include <iostream>

using namespace std;

const long n = 2145678965L;

const long a = 763214L;

const long b = 88844L;

const long c = 7766L; i

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

以上是 实现 Park-Miller 随机数生成算法的 C++ 程序 的全部内容, 来源链接: utcz.com/z/341427.html

回到顶部