C库提供的rand函数生成的随机数并不是很完美,但是写一个比较完美的随机数生成函数不是很容易的事情。
以下是Park和Miller提供的“最小标准”的可移植的随机数生成器的C元以内版本:
#include<stdio.h>
#define a 16807
#define m2147483647
#define q (m/a)
#define r (m%a)
static long intseed = 1;
long intPMrand()
{
long int h = seed/q;
long int l = seed%q;
long int t = a*l + r*h;
if(t>0){
seed = t;
}
else{
seed = t + m;
}
return seed;
}
int main()
{
int rnd;
int i;
for(i=0;i<100;i++)
{
rnd = PMrand();
printf("%d\t",rnd);
}
printf("\n");
return 0;
}