繁体   English   中英

如何生成0到max之间的随机双精度值(以C为单位)?

[英]How do I generate a random double between 0 and max (in C)?

这是生成随机双精度值的操作:

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

我不知道您的代码是什么样子,但是可以正常工作:

#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很大,可能会遇到问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM