การสร้างตัวเลขสุ่ม

C++:
การสร้างตัวเลขสุ่ม

วิธีการ:

การสร้างตัวเลขสุ่มใน C++ คุณจะต้องทำการใช้ <random> header, ซึ่งถูกนำเสนอใน C++11, โดยเสนอช่วงที่กว้างของความสามารถในการสร้างตัวเลขสุ่มจากการแจกแจงตัวเลขต่างๆ

#include <iostream>
#include <random>

int main() {
    // เริ่มต้นเครื่องกำเนิดตัวเลขสุ่ม
    std::random_device rd;  
    std::mt19937 gen(rd()); 

    // กำหนดช่วง [0, 99] รวม
    std::uniform_int_distribution<> distrib(0, 99); 

    // สร้างและพิมพ์ 5 ตัวเลขสุ่มภายในช่วงที่กำหนด
    for(int n=0; n<5; ++n)
        std::cout << distrib(gen) << ' ';
    return 0;
}

ตัวอย่างโค้ดนี้จะเริ่มต้นด้วยการใช้เครื่องกำเนิดตัวเลขสุ่ม Mersenne Twister ที่มีการกำหนดเมล็ดจาก std::random_device จากนั้นกำหนดการแจกแจงเต็มช่วงในช่วง [0, 99] และในที่สุดก็พิมพ์ออก 5 ตัวเลขสุ่มจากการแจกแจงนี้

ผลลัพธ์ตัวอย่างอาจมีลักษณะดังนี้ แต่จำไว้ว่าการประมวลผลทุกครั้งอาจจะให้ผลลัพธ์ที่แตกต่างกัน:

45 67 32 23 88

ศึกษาเพิ่มเติม:

ในอดีต, การสร้างตัวเลขสุ่มใน C++ มักพึ่งพาฟังก์ชัน rand() และฟังก์ชัน srand() สำหรับการกำหนดเมล็ด, ซึ่งพบใน <cstdlib> header อย่างไรก็ตาม, วิธีนี้มักถูกวิจารณ์ว่าขาดการแจกแจงที่สม่ำเสมอและคาดการณ์ได้ในการสร้างตัวเลข

การแนะนำ <random> header ใน C++11 ถือเป็นการปรับปรุงอย่างมีนัยสำคัญ, เสนอระบบที่ซับซ้อนสำหรับการสร้างตัวเลขสุ่ม ฟีเจอร์ที่ให้มาประกอบด้วยเครื่องยนต์หลายประเภท (เช่น std::mt19937 สำหรับ Mersenne Twister) และการแจกแจง (เช่น std::uniform_int_distribution สำหรับการแจกแจงเต็มจำนวนแบบสม่ำเสมอ) ที่สามารถรวมกันได้เพื่อตอบสนองความต้องการเฉพาะของโปรแกรมเมอร์, นำไปสู่พฤติกรรมที่คาดการณ์ได้มากขึ้น, ประสิทธิภาพที่ดีขึ้น, และความยืดหยุ่นที่เพิ่มขึ้น

ถึงแม้ <random> library จะดีกว่าวิธีการใช้ rand() อย่างมีนัยสำคัญ แต่ก็ควรทราบว่า การสร้างตัวเลขสุ่มที่แท้จริง—โดยเฉพาะสำหรับวัตถุประสงค์การเข้ารหัสลับ—ยังต้องพึ่งพาการพิจารณาเพิ่มเติม สำหรับแอพลิเคชันการเข้ารหัสลับ, ควรใช้ไลบรารีที่ออกแบบมาเฉพาะสำหรับความปลอดภัย, ซึ่งมักใช้แหล่งความไม่แน่นอนของฮาร์ดแวร์แทน