【发布时间】:2016-04-20 19:08:32
【问题描述】:
当我使用 rand() 和 srand() 在 [0,1] 中生成随机数时,它给了我这样的数字:0.70324、0.70328、0.70321...
它们仅在最后一位或两位数字上有所不同,而我的目的是获得随机浮点数,例如 0.1,0.7,0.3....
我怎样才能得到这样的随机浮点数,而不是在最后一位上产生差异?
这是我的代码:
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
int main(){
int i;
float randomNum;
for ( i=0; i<10; i++){
srand((unsigned int)time(NULL));
randomNum = ((float)rand())/RAND_MAX;
printf("%f\n",randomNum);
}
return 0;
}
【问题讨论】:
-
将
srand移到循环外。在程序开始时调用一次。您不断重置 RNG,以一秒为粒度。 -
旁注:我很少看到需要范围
[0.0 to 1.0],但范围[0.0 1.0)(不包括1.0) -
注意:对于典型的 32 位
int和 32 位float,((float)rand())/RAND_MAX;不会提供相同的float值。由于(float)rand()的四舍五入,1.0f的出现频率是0.0f的 64 倍 -
这能回答你的问题吗? srand() — why call it only once?