在c中生成范围为[0,1]的随机浮点数
generate random float number ranging [0,1] in c
当我使用 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()
一次。在每次调用 rand()
之前调用它只会使结果更可预测,因为每次调用它时使用的数字可能与前一个非常相似。
移线
srand((unsigned int)time(NULL));
到程序的开始,即在 main
.
之后
您只需为随机数生成器播种一次。
srand()
仅使用提供给它的一段数据(称为种子)初始化伪随机数生成器。 rand()
函数然后使用此种子生成随机数。之后,对 rand()
的每次调用都基于先前生成的随机数。无论如何,您不打算多次调用 srand()
。 (您实际上可以在 rand's implementation 之一中看到此行为)
这里的问题是 time()
以 秒 给你当前时间,所以当你初始化生成器并每次调用 rand()
时得到相同的数字,直到一秒钟过去。
当我使用 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()
一次。在每次调用 rand()
之前调用它只会使结果更可预测,因为每次调用它时使用的数字可能与前一个非常相似。
移线
srand((unsigned int)time(NULL));
到程序的开始,即在 main
.
您只需为随机数生成器播种一次。
srand()
仅使用提供给它的一段数据(称为种子)初始化伪随机数生成器。 rand()
函数然后使用此种子生成随机数。之后,对 rand()
的每次调用都基于先前生成的随机数。无论如何,您不打算多次调用 srand()
。 (您实际上可以在 rand's implementation 之一中看到此行为)
这里的问题是 time()
以 秒 给你当前时间,所以当你初始化生成器并每次调用 rand()
时得到相同的数字,直到一秒钟过去。