随机数的产生

来源:互联网 发布:淘宝怎么修改主题颜色 编辑:程序博客网 时间:2024/04/18 11:25

 static const int Size = 101;
static int first_time = 1;
static double rand_table[Size];
static double last_rand;

void OrignRandom()
{
 srand((int) time(0));
 for(int i = 0; i < Size; i++)
 {
  rand_table[i] = rand()/(RAND_MAX + 1.0);
 }
 last_rand = rand()/(RAND_MAX + 1.0);
 first_time = 0;
}

double Random()
{
 int index;
 if(first_time) OrignRandom();
 index = int(Size * last_rand);
 last_rand = rand_table[index];
 rand_table[index] = rand()/(RAND_MAX + 1.0);
 return last_rand;
}


int main(int argc, char* argv[])
{

 double ran;
 for(int i = 0; i < 10; i++)
 {
  ran = Random();
  cout << ran << endl;
 }
 return 0;
}

 

对于time(0)的解析如下:

time(0)得到当前时间,(INT)之后被转换为一个整数。因此时间在不停地变化,这就保证了每次执行到这里时,这里会得到一个不同的数。

这个不同的整数是为了给伪随机数发生器一个“种子”,无所谓大小,只要不同就行。

为什么伪随机数发生器需要种子?
注意到这个“伪”字。因为计算机的逻辑计算都是确定的,实际上没有办法产生真正的随机数,因此,计算机里的随机数都是采用对某个“初始数”进行某种迭代运算而产生的,如每次取其三角函数结果的第N位等,用于得到模拟的随机序列,因此称为伪随机数。那个初始数,也就是“种子”。