如何在0和最大值(C)之间生成随机双精度?

问题描述 投票:0回答:1

这是我为生成随机双倍所做的事情:

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表现不同?

c random
1个回答
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很大,您可能会遇到问题。

© www.soinside.com 2019 - 2024. All rights reserved.