Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menjana Nombor Rawak Teragih Biasanya dalam C/C?

Bagaimana untuk Menjana Nombor Rawak Teragih Biasanya dalam C/C?

Susan Sarandon
Lepaskan: 2024-11-27 16:51:12
asal
367 orang telah melayarinya

How to Generate Normally Distributed Random Numbers in C/C  ?

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;
}
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan