在 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 中实现此方法,可以采取以下步骤:
double rand0to1() { return rand() / (RAND_MAX + 1.0); }
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}; }
此方法有效地生成随机数遵循正态分布的数字,无需外部库。
以上是如何使用 Box-Muller 变换在 C/C 中生成正态分布随机数?的详细内容。更多信息请关注PHP中文网其他相关文章!