如何在0和最大值(C)之间生成随机双精度?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在0和最大值(C)之间生成随机双精度?相关的知识,希望对你有一定的参考价值。
这是我为生成随机双倍所做的事情:
int main()
{
srand(time(NULL));
double max = 10.0;
double x = (double)rand()/(double)(RAND_MAX/max);
printf("The random number is %f
", 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
", x);
printf("The random number is %f
", y);
}
当我运行它时,x总是给我一个7.3到7.4之间的值,所以这里没有变化。但是,y总是在0到10之间生成,这就是我想要的。那么为什么x表现不同?
答案
我不知道你的代码是什么样的,但这很好用:
#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
", x);
printf("The random number is %f
", y);
}
}
不同的问题:
您可能需要RAND_MAX/max;
而不是(double)(RAND_MAX/max);
,否则如果max
很大,您可能会遇到问题。
以上是关于如何在0和最大值(C)之间生成随机双精度?的主要内容,如果未能解决你的问题,请参考以下文章