0

为什么这个程序只生成0.1-0.2的数字。它需要从 0-1 生成数字。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main (int argc, char *argv[])
{
    /*declare pseudo-random number */
    float random;
    srand(time(NULL));

    random = (float) rand() / (float) RAND_MAX;
    printf("The random number is %f\n", random);

    return 0;
}

我在 Mac 上使用 gcc 进行编译。

4

3 回答 3

4

代码对我来说似乎很好。尝试生成多个数字,然后查看:

for(i=1; i<100; i++){
  random = (float) rand() / (float) RAND_MAX;
  printf("%f\n", random);
}
于 2012-10-21T17:16:19.347 回答
1
 int random_seed;
    void __cdecl srand(int data){
       random_seed = data;
    }

    int __cdecl rand (
            void
            )
    {
            return( ((random_seed = random_seed * 214013L
                + 2531011L) >> 16) & 0x7fff );
    }

这是 srand() 和 rand() 在 windows CRT 上的实现。我不确定我是否会因此被 MS 起诉。

显然,您可能必须多次调用 rand() 才能获得介于 0 和 1 之间的正确值。无论 time() 返回什么 [因为它只会设置为 random_seed]。

于 2012-10-21T17:32:19.833 回答
0

上面的代码对我来说很好(ubuntu中的gcc),即我的输出从0.1变化到1。尝试运行程序三四次然后查看输出

于 2012-10-21T17:31:44.413 回答