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

C rand()给出的值彼此非常接近,c,C,我在MacOSX10.7.3上使用GCC4.2。在我更新之前,一切都很顺利。我完全不知道为什么它不再有效 问题如下: rand()返回的值非常接近,但不相等。因此,在运行程序几次后,我得到的答案如下 输出: (double)rand()/(double)RAND_MAX. (时间越长,差异越大。) 我使用srand(time(NULL))对其进行种子设定,它一直运行良好,直到一小时前我更新它。我现在已经测试了20次,所有的输出都差不多。这当然不是随机的。 有什么想法吗? 编辑 #includ

我在MacOSX10.7.3上使用GCC4.2。在我更新之前,一切都很顺利。我完全不知道为什么它不再有效

问题如下:

rand()
返回的值非常接近,但不相等。因此,在运行程序几次后,我得到的答案如下

输出:

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

(时间越长,差异越大。) 我使用
srand(time(NULL))对其进行种子设定,它一直运行良好,直到一小时前我更新它。我现在已经测试了20次,所有的输出都差不多。这当然不是随机的。
有什么想法吗?
编辑

#include <stdlib.h> 
main() 
{ 
 srand(time(NULL)); 
 printf("%f",(double)rand()/(double)RAND_MAX); 
}
#包括
main()
{ 
srand(时间(空));
printf(“%f”,(double)rand()/(double)rand_MAX);
}

(这都是我的代码,很抱歉我的格式很糟糕。)

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

试试这个:

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

--------编辑--------

看来我最初的假设是错误的。我运行了这个程序,在不重新播种的情况下得到了非常不同的随机数

#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);
}
#包括
#包括
#包括
内部主(空)
{
int i,p;
srand(时间(空));

对于(p=0;p这可能是另一种可能性:

我认为这是您的
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);
}
但是当我将
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);
}

请更新一个。直到我更新了我的编译器,GCC。你要播种多少次?如果你想要一个双,你应该使用。一个好的起点是任何MT实现。C++在STD LIBS中有它,C应该有一个可用的库。这不一定是。附近的种子不一定转化成附近的随机数。@ OliCharleswort。h-正确,但我认为他只设定了一次种子。而不是设定每次随机数获取的种子。不过这只是一个假设,他没有发布足够的代码。嗯,它工作正常,并且通常
srand(time(NULL))
是创建随机数的正确方法。如果使用
175876342
对PRNG进行一次种子设定,然后使用
175876343
进行另一次种子设定(前一个值+1),则生成的值彼此之间没有关系。请参阅@professional业余:仅对PRNG进行一次种子设定是正确的方法。
0.314774
0.314774
0.314774
0.314774
#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