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
Susan Sarandonasal
2024-11-27 16:51:12290semak imbas

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;
}

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:
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