问题:
如何轻松生成随机数在不使用 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#include 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 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.
注:
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3