随机数发生器不工作

时间:2010-09-25 10:37:10

标签: c random numbers

我使用此功能创建介于100000000和999999999之间的随机数

int irand(int start, int stop) {
  double range = stop - start + 1;
  return start + (int)(range * rand()/(RAND_MAX+1.0));
}

当我像这样使用它时,它正常工作

while(1) {
    DWORD dw = irand(100000000, 999999999);
    printf("dynamic key: %d\n", dw);
    Sleep(100);
}

但是当我在没有while(1)的情况下使用此函数时,我总是得到相同的数字。 我需要修理什么?

2 个答案:

答案 0 :(得分:3)

随机数生成器必须加上一些熵源,以便每次都能看到不同的序列,否则1函数会使用初始种子值rand。在您的情况下,在srand (time(NULL));函数首次调用之前调用irand应该可以解决问题。您可能会发现此问题很有用:why do i always get the same sequence of random numbers with rand() ?

答案 1 :(得分:1)

不能直接回答你的问题,但如果你正在努力解决随机数问题,你应该阅读一些内容。我们自己的Jon Skeet最近发表的这篇文章很好地介绍了随机数字以及可能遇到的遗传问题:http://csharpindepth.com/Articles/Chapter12/Random.aspx

相关问题