生成c中的随机浮点数[0,1]

时间:2016-04-20 19:08:33

标签: c random

当我使用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;
}

3 个答案:

答案 0 :(得分:6)

您应该在程序开头只调用srand()一次。在每次调用rand()之前调用它只会使结果更具可预测性,因为每次调用它时的数字可能与前一个数字非常相似。

答案 1 :(得分:2)

移动线

srand((unsigned int)time(NULL));

到程序的开头,即main之后。

您只需要为随机数生成器播种一次。

答案 2 :(得分:2)

srand()仅使用提供给它的一段数据初始化伪随机数生成器,称为种子。然后rand()函数使用此种子生成随机数。之后,对rand()的每次调用都基于生成的先前随机数。无论如何,您无意多次拨打srand()。 (您实际上可以在rand's implementation

之一中看到此行为

这里的问题是time()为您提供中的当前时间,因此当您初始化生成器并在每次获得相同数字时调用rand()时,直到一秒钟过去。