使用 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

更新于: 30-Jul-2019

401 次浏览

启动您的 职业

通过完成课程获得认证

开始
广告