সি ++ র্যান্ডম নম্বর জেনারেটর

ইন্টারেক্টিভ কোড উদাহরণের সাথে C++-এ এলোমেলো সংখ্যা তৈরি করা শিখুন। বিস্তারিত ব্যাখ্যার সাথে rand(), srand(), <random> লাইব্রেরি, std::uniform_int_distribution এবং std::mt19937 অন্বেষণ করুন।

সি++ কোড এডিটর

ইন্টারেক্টিভ কোড উদাহরণের সাথে C++-এ এলোমেলো সংখ্যা তৈরি করা শিখুন। বিস্তারিত ব্যাখ্যার সাথে rand(), srand(), <random> লাইব্রেরি, std::uniform_int_distribution এবং std::mt19937 অন্বেষণ করুন।

#include <iostream>
#include <random>

int main() {
    int min = 1;
    int max = 100;
    int quantity = 5;

    // Modern C++ random number generation
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(min, max);

    std::cout << "Modern C++ random numbers:" << std::endl;
    for (int i = 0; i < quantity; i++) {
        int num = dis(gen);
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

আউটপুট

এটি ব্রাউজারের প্রিভিউ, Java বা C++ চালানো নয়। মানগুলো ক্রিপ্টোগ্রাফির উপযোগী নয়।

উদাহরণের প্রিভিউ

র্যান্ড () সহ ক্লাসিক সি ++

এলোমেলো পূর্ণসংখ্যা তৈরি করতে থেকে প্রথাগত র্যান্ড () ফাংশনটি ব্যবহার করুন <cstdlib> । সহজ এবং ব্যাপকভাবে সমর্থিত, যদিও দুর্বল এলোমেলো মানের কারণে ক্রিপ্টোগ্রাফিক অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত নয়।

দ্রুত এলোমেলো নম্বর দরকার?

কোন কোড না লেখে তাত্ক্ষণিক ফলাফলের জন্য আমাদের অনলাইন র্যান্ডম নম্বর জেনারেটর ব্যবহার করে দেখুন।

এলোমেলো নম্বর জেনারেটর খুলুন

সি++ এলোমেলো সংখ্যা জেনারেশন বোঝা

rand() কোন অ্যালগরিদম ব্যবহার করে তা বাস্তবায়নের ওপর নির্ভর করে। C++11-এ std::mt19937-এর মতো ইঞ্জিন ও বণ্টন আলাদা; বণ্টনের ডিফল্ট mt19937 ইঞ্জিন নেই।

rand() Function

rand() কোন অ্যালগরিদম ব্যবহার করে তা বাস্তবায়নের ওপর নির্ভর করে। C++11-এ std::mt19937-এর মতো ইঞ্জিন ও বণ্টন আলাদা; বণ্টনের ডিফল্ট mt19937 ইঞ্জিন নেই।

<random> Library

<random> লাইব্রেরি (C++11+) std::mt19937 (Mersenne Twister), uniform_int_distribution-এর মতো বিভিন্ন ডিস্ট্রিবিউশন এবং rand()-এর চেয়ে ভালো র‍্যান্ডমনেস কোয়ালিটি সহ আধুনিক র‍্যান্ডম নম্বর জেনারেশন দেয়।

uniform_int_distribution

std::uniform_int_distribution সুষম বণ্টন সহ পূর্ণসংখ্যার পরিসরের উপর নিখুঁত নিয়ন্ত্রণ প্রদান করে। পরিসংখ্যানিক অ্যাপ্লিকেশন, সিমুলেশন এবং যেখানে সঠিক পরিসর নিয়ন্ত্রণ প্রয়োজন সেখানে এটি আদর্শ।

std::mt19937

rand() কোন অ্যালগরিদম ব্যবহার করে তা বাস্তবায়নের ওপর নির্ভর করে। C++11-এ std::mt19937-এর মতো ইঞ্জিন ও বণ্টন আলাদা; বণ্টনের ডিফল্ট mt19937 ইঞ্জিন নেই।

সাধারণ ব্যবহারের ক্ষেত্রে

গেমিং এবং সিমুলেশন

গেম <random> লুপ এবং সিমুলেশনগুলিতে র্যান্ড () বা আধুনিক লাইব্রেরি ব্যবহার করে এলোমেলো ডাইস রোল, কার্ড ড্র, পদ্ধতিগত প্রজন্ম এবং গেম ইভেন্টগুলি তৈরি করুন।

নিরাপত্তা ও ক্রিপ্টোগ্রাফি

rand() ও std::mt19937 ক্রিপ্টোগ্রাফিক জেনারেটর নয়। নিরাপত্তার জন্য নথিভুক্ত ক্রিপ্টোগ্রাফিক লাইব্রেরি বা OS API ব্যবহার করুন; std::random_device সব প্ল্যাটফর্মে নিরাপত্তার নিশ্চয়তা নয়।

হাই পারফরম্যান্স কম্পিউটিং

std::mt19937 সহ আধুনিক <random> লাইব্রেরি HPC এবং বৈজ্ঞানিক কম্পিউটিং অ্যাপ্লিকেশনে প্রচুর পরিমাণে র‍্যান্ডম নম্বর তৈরির জন্য চমৎকার পারফরম্যান্স দেয়।

সফটওয়্যার পরীক্ষা

সি++ অ্যাপ্লিকেশনগুলিতে শক্তিশালী কোড কভারেজ এবং বাগ সনাক্তকরণ নিশ্চিত করতে এলোমেলো পরীক্ষার ডেটা, ফাজ টেস্টিং ইনপুট এবং এজ কেস তৈরি করুন।

সি++ র্যান্ডম নাম্বার জেনারেশন কিভাবে কাজ করে

rand() কোন অ্যালগরিদম ব্যবহার করে তা বাস্তবায়নের ওপর নির্ভর করে। C++11-এ std::mt19937-এর মতো ইঞ্জিন ও বণ্টন আলাদা; বণ্টনের ডিফল্ট mt19937 ইঞ্জিন নেই।

rand() কোন অ্যালগরিদম ব্যবহার করে তা বাস্তবায়নের ওপর নির্ভর করে। C++11-এ std::mt19937-এর মতো ইঞ্জিন ও বণ্টন আলাদা; বণ্টনের ডিফল্ট mt19937 ইঞ্জিন নেই।

std::random_device বাস্তবায়নের ওপর নির্ভর করে এবং নির্ধারিত ইঞ্জিনও ব্যবহার করতে পারে। সব প্ল্যাটফর্মে অপ্রত্যাশিত ফলের নিশ্চয়তা নেই।

ব্যবহারিক পরামর্শ

🎯

নতুন কোডের জন্য র্যান্ড () এড়িয়ে চলুন

rand() কোন অ্যালগরিদম ব্যবহার করে তা বাস্তবায়নের ওপর নির্ভর করে। C++11-এ std::mt19937-এর মতো ইঞ্জিন ও বণ্টন আলাদা; বণ্টনের ডিফল্ট mt19937 ইঞ্জিন নেই।

🔒

সিড স্পষ্টভাবে বেছে নিন

স্থির সিড একই ইঞ্জিনের ক্রম পুনরায় তৈরি করে। C++ ইঞ্জিন সিস্টেমের এনট্রপি দিয়ে স্বয়ংক্রিয়ভাবে শুরু হয় না; প্রয়োজনে সিড স্পষ্টভাবে বেছে নিন।

⚡

উপযুক্ত বিতরণ ব্যবহার করুন

অভিন্ন পূর্ণসংখ্যা পরিসরের জন্য, std::uniform_int_distribution ব্যবহার করুন। ফ্লোটিং-পয়েন্ট নম্বরগুলির জন্য, স্ট্যান্ডার্ড::uniform_real_distribution ব্যবহার করুন। এটি সঠিক পরিসংখ্যানগত বৈশিষ্ট্য নিশ্চিত করে।

টেকনিক্যাল স্পেসিফিকেশন

অ্যালগরিদম

  • rand() কোন অ্যালগরিদম ব্যবহার করে তা বাস্তবায়নের ওপর নির্ভর করে। C++11-এ std::mt19937-এর মতো ইঞ্জিন ও বণ্টন আলাদা; বণ্টনের ডিফল্ট mt19937 ইঞ্জিন নেই।
  • মার্সেন টুইস্টার (std::mt19937)
  • std::random_device বাস্তবায়নের ওপর নির্ভর করে এবং নির্ধারিত ইঞ্জিনও ব্যবহার করতে পারে। সব প্ল্যাটফর্মে অপ্রত্যাশিত ফলের নিশ্চয়তা নেই।

পারফরম্যান্স বৈশিষ্ট্য

  • র্যান্ড (): দ্রুত কিন্তু দুর্বল এলোমেলোতার গুণমান
  • <random>: চমৎকার মানের সঙ্গে দ্রুত
  • std::mt19937: বড় পরিমাণের জন্য খুবই দ্রুত

সাধারণ জিজ্ঞাসা

সি ++ এর কোন কোন পদ্ধতি এখানে কভার করা হয়েছে?

ক্লাসিক srand() সহ rand(), আধুনিক <random> লাইব্রেরি, std::uniform_int_distribution এবং mt19937 ইঞ্জিন।

আমি কি উদাহরণগুলি নিজের মতো কাস্টমাইজ করতে পারি?

হ্যাঁ। প্যারামিটার প্যানেলে সর্বনিম্ন, সর্বোচ্চ এবং পরিমাণ সেট করে রান করুন, তারপর আউটপুট দেখুন।

বর্তমানে কোন পদ্ধতিটি সুপারিশ করা হয়?

নাম-নির্দিষ্ট বণ্টন ও ইঞ্জিন সহ <random> লাইব্রেরি; rand() পুরনো কোডে এখনও দেখা যায়, তবে এর গুণমান দুর্বল এবং পরিসর নিয়ে নানা ঝামেলা রয়েছে।

আমি কীভাবে জেনারেটরটি সিড করব?

std::random_device বাস্তবায়নের ওপর নির্ভর করে এবং নির্ধারিত ইঞ্জিনও ব্যবহার করতে পারে। সব প্ল্যাটফর্মে অপ্রত্যাশিত ফলের নিশ্চয়তা নেই।

সি ++ এ rand() কী পরিসরের মান রিটার্ন করে?

rand() 0 থেকে RAND_MAX পর্যন্ত দুই প্রান্তসহ মান দেয়। প্ল্যাটফর্ম যাচাই করুন: Microsoft CRT-এ সীমা 32767; অন্য বাস্তবায়নে ভিন্ন হতে পারে।

rand() কি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত?

rand() ও std::mt19937 ক্রিপ্টোগ্রাফিক জেনারেটর নয়। নিরাপত্তার জন্য নথিভুক্ত ক্রিপ্টোগ্রাফিক লাইব্রেরি বা OS API ব্যবহার করুন; std::random_device সব প্ল্যাটফর্মে নিরাপত্তার নিশ্চয়তা নয়।

সি ++ এ আমি কীভাবে র‍্যান্ডম ফ্লোট তৈরি করব?

আপনার ব্যবধানের জন্য কনফিগার করা std::uniform_real_distribution-এর সাথে std::mt19937 একত্রিত করুন, যেমন 0.0 থেকে 1.0, তারপর dist(generator) কল করুন। ফলাফলটি একটি double যেখানে নিম্ন সীমা অন্তর্ভুক্ত থাকে কিন্তু উচ্চ সীমা বাদ থাকে।

সি ++ এ rand() কি থ্রেড-সেফ?

rand()-এর থ্রেড নিরাপত্তা বাস্তবায়নের ওপর নির্ভর করে। প্রতি থ্রেডে আলাদা ইঞ্জিন রাখুন বা ভাগ করা ইঞ্জিনে প্রবেশ সমন্বয় করুন।

C++ standard draft: rand / srand · C++ standard draft: random_device · C++ standard draft: uniform_int_distribution

তথ্যসূত্র ও সম্পদ

  • C++ <random> Reference - cppreference

    C++ সিউডো-র‍্যান্ডম সংখ্যা জেনারেশন লাইব্রেরির অফিসিয়াল রেফারেন্স।

  • Mersenne Twister - Wikipedia

    বেশিরভাগ ভাষার random লাইব্রেরির পেছনে থাকা Mersenne Twister অ্যালগরিদম।