在 C 中生成一个随机的、均匀分布的实数

Mar*_*s.S 3 c random double random-sample uniform-distribution

我想在区间 [0,1] 中生成一个随机的实数。我想为数字设置一个指针,比如说n,所以每当我声明时n,它都会被引用到随机生成的数字。

我在 StackOverflow 和 Google 上搜索过,但其中大部分是针对 C++ 或整数的。

我已经尝试过在答案中向我建议的这段代码:

#include <stdio.h>
#include <stdlib.h>
int main()
{
 double n;
double get_random() { return (double)rand() / (double)RAND_MAX; }
n = get_random();
printf("%f", n);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,我只能得到一个值 0.00000000。

我怎样才能修复我的程序?

Ido*_*dos 5

您可以使用:

#include <time.h>
srand(time(NULL)); // randomize seed
double get_random() { return (double)rand() / (double)RAND_MAX; }
n = get_random();
Run Code Online (Sandbox Code Playgroud)

srand()设置用于rand生成伪随机数的种子。如果您srand在第一次调用之前没有调用rand,就好像您已经调用过一样srand(1)(作为默认值)。

如果要排除 [1],请使用:

(double)rand() / (double)((unsigned)RAND_MAX + 1);
Run Code Online (Sandbox Code Playgroud)

完整解决方案:

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

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

int main()
{
    double n = 0;
    srand(time(NULL)); // randomize seed
    n = get_random(); // call the function to get a different value of n every time

    printf("%f\n", n);  // print your number
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

每次运行它时,您都会得到不同的n.