Ở đâ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