Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

การสร้างเลขสุ่มแบบ Normal Distribution ใน C/C++

บทความนี้แสดงวิธีสร้างเลขสุ่มที่กระจายตัวแบบปกติ (Normal Distribution) โดยใช้สูตร Box-Muller Transform:

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

โดย x₁ และ x₂ เป็นค่าสุ่มแบบ Uniform Distribution

ตัวอย่าง

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

double rand_gen() {
    return ((double)(rand()) + 1.) / ((double)(RAND_MAX) + 1.);
}

double normalRandom() {
    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;
    srand(time(0));
    for (int i = 0; i < 20; i++) {
        double x = normalRandom() * sigma + Mi;
        cout << " x = " << x << endl;
    }
    return 0;
}

ผลลัพธ์ (ตัวอย่าง)

x = 1.91628
x = 57.0448
x = 51.4348
... (ค่าต่างๆ ตามการกระจายแบบปกติ) ...