Menjana Nombor Rawak Menggunakan Taburan Normal dalam C/C
Keperluan untuk menjana nombor rawak berikutan taburan normal sering timbul dalam pelbagai aplikasi pengaturcaraan . Dalam C/C , terdapat beberapa teknik yang boleh anda gunakan untuk mencapai matlamat ini.
Satu pendekatan yang diterima pakai secara meluas ialah transformasi Box-Muller. Kaedah ini melibatkan penjanaan dua nombor rawak seragam bebas dan mengubahnya menggunakan formula matematik untuk mendapatkan nilai taburan normal. Transformasi Box-Muller adalah secara matematik yang ketat dan menghasilkan keputusan yang tepat.
Berikut ialah cara untuk melaksanakan transformasi Box-Muller dalam C/C :
#include <random> #include <cmath> // Generate a random number following a Gaussian distribution double normal_rand() { static double z1; static bool ready = false; // If z1 is not ready, generate two uniform random numbers if (!ready) { double u1 = std::uniform_real_distribution<double>(0, 1)(); double u2 = std::uniform_real_distribution<double>(0, 1)(); z1 = std::sqrt(-2 * std::log(u1)) * std::cos(2 * M_PI * u2); ready = true; } // Return z1 and mark it as used ready = false; return z1; }
Dalam contoh di atas, std:: uniform_real_distribution menjana nombor rawak seragam, manakala std::sqrt and std::cos melakukan matematik yang diperlukan transformasi.
Menggunakan transformasi Box-Muller menyediakan cara yang mudah dan boleh dipercayai untuk menjana nombor rawak mengikut taburan normal dalam C/C . Dengan menggunakan teknik ini, pengaturcara boleh mengelakkan penggunaan perpustakaan luaran seperti Boost dan memanfaatkan kefungsian perpustakaan C standard.
Atas ialah kandungan terperinci Bagaimana untuk Menjana Nombor Rawak Teragih Biasanya dalam C/C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!