这就是我生成随机加倍的方法:
int main()
{
srand(time(NULL));
double max = 10.0;
double x = (double)rand()/(double)(RAND_MAX/max);
printf("The random number is %f \n", x);
}
尽管生成的数字本质上是随机的,但仍然不够随机。
我第一次运行它,我得到了7.303385 然后我得到了7.320475。 然后我得到了7.332377。 然后我得到了7.345195。
您明白了。看来我的代码只生成7.3和7.4之间的随机数。
我在这里做什么错了?
编辑:
我刚刚注意到的另一件事:
我稍微修改了代码:
int main()
{
srand(time(NULL));
double max = 10.0;
double x = (double)rand()/(double)(RAND_MAX/max);
double y = (double)rand()/(double)(RAND_MAX/max);
printf("The random number is %f \n", x);
printf("The random number is %f \n", y);
}
运行此命令时,x始终为我提供7.3到7.4之间的值,因此此处没有变化。但是,y总是生成0到10之间的值,这正是我想要的。那么为什么x的行为有所不同?
答案 0 :(得分:0)
我不知道您的代码是什么样的,但这可以正常工作:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL)); // call srand once only
for (int i = 0; i < 50; i++)
{
// srand(time(NULL)); // don't put srand here
double max = 10.0;
double x = (double)rand() / (double)(RAND_MAX / max);
double y = (double)rand() / (double)(RAND_MAX / max);
printf("The random number is %f \n", x);
printf("The random number is %f \n", y);
}
}
不同的问题:
您可能希望使用RAND_MAX/max;
而不是(double)(RAND_MAX/max);
,否则如果max
很大,可能会遇到问题。