c语言如何生成(0,1)之间均匀分布的随机数?

在C语言中,生成(0,1)之间均匀分布的随机数可以利用标准库中的随机数生成函数和一些数学运算来实现。C语言标准库提供了 rand() 函数来生成随机数,但它生成的是整数随机数。我们可以通过一些操作将整数随机数映射到(0,1)之间的浮点数。

方法一:使用 rand() 函数和归一化

  1. 使用 rand() 函数生成整数随机数:

    c
    #include <stdlib.h> #include <time.h> int main() { // 设置随机数种子,一般在程序开始时调用一次即可 srand(time(NULL)); // 生成随机数,并归一化到 [0,1) double random_value = (double)rand() / RAND_MAX; // 打印随机数 printf("Random number: %f\n", random_value); return 0; }
    • rand() 函数用于生成一个范围在 0 到 RAND_MAX 之间的整数。
    • srand(time(NULL)) 用于初始化随机数种子,通过当前时间来确保每次运行程序时种子不同,从而产生不同的随机数序列。
  2. 归一化操作:

    rand() 函数生成的整数除以 RAND_MAX,得到的结果范围是 [0,1)。由于 rand() 的返回值范围是 0 到 RAND_MAX,因此除以 RAND_MAX 后得到的是一个位于(0,1)内的随机浮点数。

方法二:使用更高级的随机数生成器(推荐)

如果需要更高质量和更均匀的随机数,可以使用 <random> 头文件中的随机数生成器,比如 std::uniform_real_distribution 结合 std::mt19937(Mersenne Twister 算法)作为随机数引擎。

c
#include <stdio.h> #include <stdlib.h> #include <time.h> double generate_random() { static int initialized = 0; if (!initialized) { srand(time(NULL)); initialized = 1; } return (double)rand() / RAND_MAX; } int main() { double random_value = generate_random(); printf("Random number: %f\n", random_value); return 0; }