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