问题:
如何轻松生成随机数在不使用 Boost 的情况下遵循 C 或 C 的正态分布
答案:
Box-Muller 变换
Box-Muller 变换是一种广泛使用的生成方法来自均匀随机数生成器的正态分布数字。它生成的值精确地遵循高斯分布。
Box-Muller 变换的数学公式如下:
x = sqrt(-2 * log(U1)) * cos(2 * π * U2) y = sqrt(-2 * log(U1)) * sin(2 * π * U2)
其中:
实现:
要在 C/C 中实现 Box-Muller 变换,您可以使用以下命令代码:
#include <cmath> #include <random> double box_muller() { std::random_device rd; // Seed the random number generator with a system clock seed std::default_random_engine rng(rd()); std::uniform_real_distribution<double> dist(0.0, 1.0); double U1 = dist(rng); double U2 = dist(rng); double x = sqrt(-2 * log(U1)) * cos(2 * M_PI * U2); return x; }
用法:
要生成正态分布的随机数,只需调用 box_muller() 函数:
double random_number = box_muller();
random_number 的值将是均值 0 和标准差的高斯分布随机变量1.
注意:
以上是如何在没有Boost的情况下在C/C中生成正态分布的随机数?的详细内容。更多信息请关注PHP中文网其他相关文章!