首页 >后端开发 >C++ >如何使用 Box-Muller 变换在 C/C 中生成正态分布随机数?

如何使用 Box-Muller 变换在 C/C 中生成正态分布随机数?

Linda Hamilton
Linda Hamilton原创
2024-11-30 12:19:26347浏览

How to Generate Normally Distributed Random Numbers in C/C   using the Box-Muller Transform?

在 C/C 中生成正态分布的随机数

在 C 或 C 中生成遵循正态分布的随机数是一项常见任务在各种计算和统计应用中。使用 Box-Muller 变换可以有效地实现这一点,Box-Muller 变换是一种广泛采用的技术,它利用两个均匀随机数来生成一对正态分布的随机数。

Box-Muller 变换依赖于一个简单的数学公式:

x = sqrt(-2 * ln(u1)) * cos(2 * pi * u2)
y = sqrt(-2 * ln(u1)) * sin(2 * pi * u2)

其中 u1 和 u2 是在 [0, 1] 范围内生成的两个独立的均匀随机数。这两个方程定义了两个独立的随机变量 x 和 y,它们遵循均值为零且单位方差为零的正态分布。

要在 C/C 中实现此方法,可以采取以下步骤:

  1. 包含标准库头文件 用于访问 rand() 函数。
  2. 定义一个函数来生成范围 [0, 1) 后的均匀随机双精度值。这可以通过以下方式完成:
double rand0to1() {
    return rand() / (RAND_MAX + 1.0);
}
  1. 实现 Box-Muller 变换函数:
pair<double, double> box_muller() {
    double u1 = rand0to1();
    double u2 = rand0to1();
    double x = sqrt(-2.0 * log(u1)) * cos(2.0 * M_PI * u2);
    double y = sqrt(-2.0 * log(u1)) * sin(2.0 * M_PI * u2);
    return {x, y};
}
  1. 调用 box_muller 函数来生成根据需要正态分布随机数。

此方法有效地生成随机数遵循正态分布的数字,无需外部库。

以上是如何使用 Box-Muller 变换在 C/C 中生成正态分布随机数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn