c按时随机数

时间:2012-10-21 17:09:27

标签: c random

为什么这个程序只生成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进行编译。

3 个答案:

答案 0 :(得分:4)

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

for(i=1; i<100; i++){
  random = (float) rand() / (float) RAND_MAX;
  printf("%f\n", random);
}

答案 1 :(得分: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 );
    }

这是在Windows CRT上执行srand()和rand()。我不确定我是否会被MS起诉。

显然,你可能需要多次调用rand()以获得0到1之间的正确值。无论什么时候()返回[因为它只会被设置为random_seed]。

答案 2 :(得分:0)

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