实现 Park-Miller 随机数生成算法的 C++ 程序
Park-Miller 随机数生成算法是另一种生成随机数的方法。
这种类型的随机数生成器 (RNG) 的一般公式是: X_{k+1} = g X(k)mod n
在模数 n 是素数或素数的幂的情况下,乘数 g 是高乘法阶模 n 的元素,并且种子 X0 与 n 互质。
算法
BeginDeclare 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