Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menjana Nombor Rawak Teragih Biasa dalam C/C menggunakan Transformasi Box-Muller?
Menjana Nombor Rawak Teragih Biasa dalam C/C
Menjana nombor rawak yang mematuhi taburan normal dalam C atau C adalah tugas yang kerap dalam pelbagai aplikasi pengiraan dan statistik. Ini boleh dicapai dengan berkesan menggunakan transformasi Box-Muller, teknik yang digunakan secara meluas yang memanfaatkan dua nombor rawak seragam untuk menghasilkan sepasang nombor yang diedarkan secara normal.
Transformasi Box-Muller bergantung pada formula matematik mudah:
x = sqrt(-2 * ln(u1)) * cos(2 * pi * u2) y = sqrt(-2 * ln(u1)) * sin(2 * pi * u2)
di mana u1 dan u2 ialah dua nombor rawak seragam bebas yang dijana dalam julat [0, 1]. Kedua-dua persamaan ini mentakrifkan dua pembolehubah rawak bebas, x dan y, yang mengikut taburan normal dengan min sifar dan varians unit.
Untuk melaksanakan kaedah ini dalam C/C , langkah berikut boleh diambil:
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}; }
Kaedah ini berkesan menjana nombor rawak yang mengikut taburan normal tanpa memerlukan perpustakaan luar.
Atas ialah kandungan terperinci Bagaimana untuk Menjana Nombor Rawak Teragih Biasa dalam C/C menggunakan Transformasi Box-Muller?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!