random函数中存在rand()可以生成随机数,但是一些场合仍需要 用户自己去编写随机数的算法。
原理
基数 base = 256.0
两个常数 a = 17.0 , b = 139.0
种子 r
按照下面的递归算法不断的去更新种子
R
i
=
m
o
d
(
a
∗
R
i
−
1
+
b
,
b
a
s
e
)
Ri = mod( a * Ri-1 + b , base )
Ri=mod(a∗Ri−1+b,base)
第 i 个 生 成 的 随 机 数 为 P i = R i / b a s e 第i个生成的随机数为Pi = Ri / base 第i个生成的随机数为Pi=Ri/base
代码如下
#include<iostream>
#include<iomanip>
using namespace std;
const int u = 17;
const int v = 139;
const int base = 256;
double Rand(double &r){
double temp1 = u * r + v;
double temp2 = (int) temp1 / base ;
double temp3 = temp1 - temp2 * base;
r = temp3 ;
return r / base ;
}
int main(void){
double r = 5;
for(int i = 0 ; i <= 10 ; i++ )
cout << fixed << setprecision(6) << Rand(r) << endl ;
}
最终生成了 0 - 1 之间的随机数
若要生成[ n , m ] 之间的随机数。
参考下文