【问题标题】:Why only 0.000000 from psuedo-random number generator?为什么只有 0.000000 来自伪随机数生成器?
【发布时间】:2014-04-06 23:04:48
【问题描述】:

为什么 rand_float 只返回值 0.000000?

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

int main(int test, int numpoints, int numtrials, int dimension){

    //generate a random number
    float r = rand_float();

    //print it
    printf("%f", r);
    printf("\n");
}

//function generates a random float in [0,1]
int rand_float(){
    srand(time(NULL));
    return (float)rand()/RAND_MAX;
}

【问题讨论】:

  • 因为您从 int rand_float() 返回一个 int
  • 另外,main 不是这样定义的,你不能使用任意参数

标签: c random


【解决方案1】:

注意 rand_float 的返回类型是int

所以[0,1) 值(在浮点数中)被隐式转换0(一个int),这是该函数将返回的所有内容。

修复返回类型 - 将其从 int 更改为 float

另外,要么向前声明 rand_float 函数,要么将函数定义移到 main 函数之前 .. 并检查你的主要问题上的其他 cmets。启用(并阅读)编译器警告以获取有关 [可能] 有问题的代码的提示!

【讨论】:

  • 不确定我是否理解。我可以像 float rand_float(){...} 那样用 float 而不是 int 声明一个函数吗?
  • @hannah 是的,您可以.. 但是您应该前向声明函数(通过声明或移动定义)。在这种情况下,只需将rand_float 函数定义移动到上方 main
  • 为什么不呢?函数可以返回任何东西
  • 另外,把srand()放到函数外面,放到它所属的main(),否则即使你解决了浮动问题,你的数字也不会是随机的。
猜你喜欢
  • 2013-09-15
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
相关资源
最近更新 更多