問題:
如何輕鬆產生隨機數在不使用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中文網其他相關文章!