rand()给出彼此非常接近的值

时间:2012-03-23 22:01:53

标签: c

我在Mac OS X 10.7.3上使用GCC 4.2。一切顺利,直到我更新它。我完全不知道为什么它不再起作用。

问题如下:

rand()给了我一些非常接近彼此的值,但不相等。因此,在多次运行程序后,我得到的答案就像。

输出:

(double)rand()/(double)RAND_MAX.

0.945264,
0.945295,
0.945335

(当更多时间过去时,差异会变大。) 我使用srand(time(NULL));播种它,直到一小时前我更新它才能正常运行。我现在测试了20次,所有的输出都是大约。同样,这当然不是随机的。 有任何想法吗? 的修改

#include <stdlib.h> 
main() 
{ 
 srand(time(NULL)); 
 printf("%f",(double)rand()/(double)RAND_MAX); 
}

(这是我的所有代码,对不起,我对格式化感到厌烦。)

2 个答案:

答案 0 :(得分:0)

这可能是另一种可能性:

我认为这是您srand

的展示位置

当我发布此

#include <stdlib.h> 
#include <time.h> 
#include <stdio.h> 
main() 
{ 
    int i;
    for(i=0;i<4;i++){ 
        srand(time(NULL)); 
        printf("%f\n",(double)rand()/(double)RAND_MAX); 
    }
    return(0);
}

我得到了这个结果

0.314774
0.314774
0.314774
0.314774

但是当我在循环之外移动srand时,我得到了不同的随机数

#include <stdlib.h> 
#include <time.h> 
#include <stdio.h> 
main() 
{ 
    int i;
    srand(time(NULL));
    for(i=0;i<4;i++){  
        printf("%f\n",(double)rand()/(double)RAND_MAX); 
    }
    return(0);
}

我得到了这些结果

0.154158
0.832643
0.529257
0.529633

答案 1 :(得分:-3)

如果你用time(NULL)看到它,我相信它总会彼此接近,因为时间正在慢慢增加。随着时间的推移,你会看到你的随机数略有变化。

试试这个:

(double)srand(time(NULL))/(double)RAND_MAX.

-------- -------- EDIT

看起来我原来的假设是错误的。我跑了这个得到非常不同的随机数而没有重新播种。

#include <stdio.h>  
#include <stdlib.h>  
#include <time.h>  

int main(void)
{
  int i, p;

  srand(time(NULL));

  for(p=0;p<10;p++){  
     i = rand();

     printf ("Your random number is %d\n", i);  

  }
  return(0);
}