如何生成0到1之间的随机数?

我想在(0,1)之间生成随机数。 我正在尝试以下方面:

double r2() { return((rand() % 10000) / 10000.0); } int SA() { double u; u = r2(); } 

但它不会产生预期的结果。 我该如何解决?

在您的版本中, rand() % 10000将产生09999之间的整数。 由于RAND_MAX可能小到32767,并且因为它不能被10000整除,并且相对于10000不大,所以结果的“随机性”将存在显着偏差,而且,最大值将为0.9999,而不是1.0 ,并且您不必要地将您的值限制为四位小数。

它是简单的算术,随机数除以最大可能的随机数将产生从0到1的数字,同时利用RNG的全分辨率和分布

 double r2() { return (double)rand() / (double)RAND_MAX ; } 

如果故意排除1.0,则使用(double)rand() / (double)((unsigned)RAND_MAX + 1)

以下是在指定范围内生成随机数的一般过程:

 int randInRange(int min, int max) { return min + (int) (rand() / (double) (RAND_MAX + 1) * (max - min + 1)); } 

根据所使用的PRNG算法, %运算符可能导致非常随机的数字序列。

在我看来,你没有先调用srand。 这里的用法示例。

使用srand()设置种子。 此外,您没有在rand()中指定最大值,因此它使用RAND_MAX。 我不确定它实际上是10000 …为什么不指定它。 虽然,我们不知道你的“预期结果”是什么。 这是一个随机数生成器。 你有什么期待,你看到了什么?

如另一条评论中所述,SA()未明确返回任何内容。

http://pubs.opengroup.org/onlinepubs/009695399/functions/rand.html http://www.thinkage.ca/english/gcos/expl/c/lib/rand.html

编辑:从C中生成[-1,1]之间的随机数? ((float)rand())/RAND_MAX在[0,1]中返回一个浮点数

您是否尝试过:replace((rand()%10000)/ 10000.0),用:( rand()%2)。 这对我有用!

所以你可以这样做:

 double r2() { srand(time(NULL)); return(rand() % 2); }