当我使用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;
}
答案 0 :(得分:6)
您应该在程序开头只调用srand()
一次。在每次调用rand()
之前调用它只会使结果更具可预测性,因为每次调用它时的数字可能与前一个数字非常相似。
答案 1 :(得分:2)
移动线
srand((unsigned int)time(NULL));
到程序的开头,即main
之后。
您只需要为随机数生成器播种一次。
答案 2 :(得分:2)
srand()
仅使用提供给它的一段数据初始化伪随机数生成器,称为种子。然后rand()
函数使用此种子生成随机数。之后,对rand()
的每次调用都基于生成的先前随机数。无论如何,您无意多次拨打srand()
。 (您实际上可以在rand's implementation)
这里的问题是time()
为您提供秒中的当前时间,因此当您初始化生成器并在每次获得相同数字时调用rand()
时,直到一秒钟过去。