Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Tạo số ngẫu nhiên theo phân phối chuẩn trong C/C++

Ở đây ta sẽ thấy cách tạo số ngẫu nhiên tuân theo phân phối chuẩn (normal distribution). Công thức cho số ngẫu nhiên chuẩn:

z = √(-2 ln x₁) * cos(2πx₂)

Trong đó x₁ và x₂ được chọn ngẫu nhiên.

Ví dụ

#include <cstdlib>
#include <cmath>
#include <ctime>
#include <iostream>
using namespace std;

double rand_gen() {
    // trả về giá trị ngẫu nhiên phân phối đều
    return ((double)(rand()) + 1.) / ((double)(RAND_MAX) + 1.);
}

double normalRandom() {
    // trả về giá trị ngẫu nhiên phân phối chuẩn
    double v1 = rand_gen();
    double v2 = rand_gen();
    return cos(2 * 3.14 * v2) * sqrt(-2. * log(v1));
}

int main() {
    double sigma = 82.0;
    double Mi = 40.0;
    for (int i = 0; i < 20; i++) {
        double x = normalRandom() * sigma + Mi;
        cout << " x = " << x << endl;
    }
    return 0;
}

Kết quả

x = 1.91628
x = 57.0448
x = 51.4348
x = 53.5612
x = -83.8511
x = -28.9197
x = -76.0576
x = 62.1435
x = 23.9
x = -87.0663
x = 50.6942
x = 94.1685
x = -88.1597
x = 168.502
x = 40.7563
x = 90.1091
x = 16.9218
x = -36.9178
x = 135.969
x = 56.8888