Soalan:
Bagaimana cara saya menjana nombor rawak dengan mudah mengikuti taburan normal dalam C atau C tanpa menggunakan Boost perpustakaan?
Jawapan:
Transformasi Box-Muller
Transformasi Box-Muller ialah kaedah yang digunakan secara meluas untuk menjana nombor taburan biasa daripada penjana nombor rawak seragam. Ia menghasilkan nilai yang mematuhi taburan Gaussian dengan tepat.
Formula matematik untuk transformasi Box-Muller adalah seperti berikut:
x = sqrt(-2 * log(U1)) * cos(2 * π * U2) y = sqrt(-2 * log(U1)) * sin(2 * π * U2)
di mana:
Pelaksanaan:
Untuk melaksanakan transformasi Box-Muller dalam C/C , anda boleh menggunakan yang berikut kod:
#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; }
Penggunaan:
Untuk menjana nombor rawak yang diedarkan secara normal, hanya panggil fungsi box_muller():
double random_number = box_muller();
Nilai random_number akan menjadi pembolehubah rawak teragih Gaussian dengan min 0 dan sisihan piawai 1.
Nota:
Atas ialah kandungan terperinci Bagaimana untuk Menjana Nombor Rawak Teragih Biasanya dalam C/C Tanpa Boost?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!