কম্পিউটার টিউটোরিয়াল

সি/সি++-এ নরমাল ডিস্ট্রিবিউশন (Normal Distribution) অনুসারে র‍্যান্ডম নম্বর জেনারেট করা

নরমাল (গাউসিয়ান) ডিস্ট্রিবিউশন অনুসারে র‍্যান্ডম নম্বর জেনারেট করার জন্য বক্স-মুলার ট্রান্সফরম (Box-Muller Transform) ব্যবহার করা হয়। এই পদ্ধতিতে দুটি ইউনিফর্ম র‍্যান্ডম নম্বর থেকে একটি নরমাল র‍্যান্ডম নম্বর তৈরি করা হয়।

ফর্মুলা

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

এখানে x₁ এবং x₂ হলো ০ থেকে ১ এর মধ্যে ইউনিফর্ম ডিস্ট্রিবিউশন 따르는 র‍্যান্ডম নম্বর।

উদাহরণ (C++)

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

double rand_gen() {
    // 0.0 থেকে 1.0 পর্যন্ত ইউনিফর্ম র‍্যান্ডম
    return ((double)rand() + 1.0) / ((double)RAND_MAX + 1.0);
}

double normalRandom() {
    double v1 = rand_gen();
    double v2 = rand_gen();
    return cos(2 * 3.141592653589793 * v2) * sqrt(-2.0 * log(v1));
}

int main() {
    srand(time(0)); // সিড সেট
    double sigma = 82.0;  // স্ট্যান্ডার্ড ডেভিয়েশন
    double mu = 40.0;     // মিন (মध्यমান)
    for (int i = 0; i < 20; i++) {
        double x = normalRandom() * sigma + mu;
        cout << "x = " << x << endl;
    }
    return 0;
}

আউটপুট (নমুনা)

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

আধুনিক C++ (C++11 এবং পরবর্তী) — ভালো পদ্ধতি

#include <random>
#include <iostream>

int main() {
    std::random_device rd;
    std::mt19937 gen(rd());
    std::normal_distribution<> d(40.0, 82.0); // mean=40, stddev=82
    for (int i = 0; i < 20; i++)
        std::cout << "x = " << d(gen) << '\n';
    return 0;
}

সুপারিশ: নতুন কোডে <random> হেডার এবং std::normal_distribution ব্যবহার করুন — এটি আরও সঠিক, দ্রুত এবং স্ট্যান্ডার্ড-কম্প্লায়েন্ট।

  1. PHP-এ র‍্যান্ডম ইউনিক নাম্বার অ্যারে জেনারেট করা

  2. C#-এ সিকিউর র‍্যান্ডম নম্বর জেনারেট করা

  3. পাইথনে সুডো-র‍্যান্ডম নম্বর জেনারেট করা (random)

  4. Python NumPy ব্যবহার করে র‍্যান্ডম নম্বর জেনারেট করা