ตัวเลขสุ่มด้วยส่วนหัว random
สร้างตัวเลขสุ่มคุณภาพดีด้วยเอนจินและการแจกแจงสมัยใหม่
ตัวเลขสุ่มด้วยส่วนหัว random เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงไม่ใช้ rand()?
std::rand() แบบดั้งเดิมของภาษา C ใช้สถานะร่วมส่วนกลาง มีคุณภาพทางสถิติไม่ดี และไม่ปลอดภัยสำหรับการทำงานหลายเธรด C++ สมัยใหม่มีเครื่องมือที่ดีกว่ามากใน <random>
สูตรสามส่วน
การสร้างจำนวนสุ่มใน C++ สมัยใหม่ประกอบด้วยสามส่วน:
- แหล่งค่าเริ่มต้น (เอนโทรปีแท้จริง)
- กลไกสร้างจำนวนสุ่ม (สถานะที่กำหนดได้แน่นอน)
- การแจกแจง (กำหนดรูปแบบของผลลัพธ์)
การกำหนดค่าเริ่มต้นด้วย random_device
std::random_device สุ่มตัวอย่างเอนโทรปีจริงจากระบบปฏิบัติการ แต่อาจทำงานช้าได้ ให้ใช้มันเพียงครั้งเดียวเพื่อกำหนดค่าเริ่มต้นให้กลไกที่ทำงานเร็ว
#include <random>
std::random_device rd;
std::mt19937 engine(rd());กลไก mt19937
std::mt19937 (Mersenne Twister) เป็นกลไกสร้างจำนวนสุ่มเทียมที่ทำงานเร็วและมีคุณภาพทางสถิติดีเยี่ยม จึงเป็นตัวเลือกเริ่มต้นสำหรับแอปพลิเคชันส่วนใหญ่
การแจกแจงจำนวนเต็มแบบสม่ำเสมอ
สร้างจำนวนเต็มที่มีการแจกแจงสม่ำเสมอภายในช่วงแบบปิด
std::uniform_int_distribution<int> dice(1, 6);
int roll = dice(engine);การแจกแจงจำนวนจริงแบบสม่ำเสมอ
ใช้สำหรับเลขทศนิยมในช่วงแบบปิดด้านซ้ายและเปิดด้านขวา [a, b)
std::uniform_real_distribution<double> dist(0.0, 1.0);
double x = dist(engine);การแจกแจงปกติ (เกาส์เซียน)
ใช้สร้างจำนวนสุ่มตามเส้นโค้งรูประฆัง ซึ่งพบได้บ่อยในการจำลองและการเรียนรู้ของเครื่อง
std::normal_distribution<double> norm(0.0, 1.0); // mean 0, stddev 1
double x = norm(engine);การแจกแจงรูปแบบอื่น
ไลบรารีนี้ยังมีการแจกแจงอีกหลายรูปแบบ เช่น bernoulli_distribution, poisson_distribution, exponential_distribution, discrete_distribution และอื่น ๆ
การสร้างจำนวนสุ่มที่ทำซ้ำได้
สำหรับการทดสอบ ให้กำหนดค่าเริ่มต้นด้วยค่าคงที่ เพื่อให้ได้ลำดับเดิมในการทำงานแต่ละครั้ง
std::mt19937 engine(42);
// Same output every time you run the programการสับเปลี่ยนแบบสุ่ม
สับเปลี่ยนข้อมูลในคอนเทนเนอร์ด้วย std::shuffle ซึ่งรับกลไกสร้างจำนวนสุ่มใด ๆ ก็ได้
#include <algorithm>
std::vector<int> v = {1,2,3,4,5};
std::shuffle(v.begin(), v.end(), engine);ข้อควรระวัง: การกำหนดค่าเริ่มต้นซ้ำในลูป
อย่าสร้าง random_device หรือกลไกสร้างจำนวนสุ่มใหม่สำหรับจำนวนสุ่มแต่ละค่า ให้สร้างกลไกหนึ่งครั้งแล้วนำกลับมาใช้ซ้ำในทุกการเรียกใช้
ตรวจสอบความเข้าใจ
วิธีสมัยใหม่ที่ปลอดภัยที่สุดในการกำหนดค่าเริ่มต้นให้กลไกสร้างจำนวนสุ่มเทียมใน C++ คืออะไร?
สรุป
การสร้างจำนวนสุ่มใน C++ สมัยใหม่ใช้ random_device สำหรับกำหนดค่าเริ่มต้น ใช้ mt19937 เป็นกลไก และใช้การแจกแจง เช่น uniform_int_distribution เพื่อกำหนดรูปแบบของผลลัพธ์ ควรใช้กลไกเดิมซ้ำ และไม่สร้างใหม่ในการเรียกใช้แต่ละครั้ง
คำถามที่พบบ่อย
บทเรียน “ตัวเลขสุ่มด้วยส่วนหัว random” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ตัวเลขสุ่มด้วยส่วนหัว random” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ตัวเลขสุ่มด้วยส่วนหัว random”
สร้างตัวเลขสุ่มคุณภาพดีด้วยเอนจินและการแจกแจงสมัยใหม่ คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “ตัวเลขสุ่มด้วยส่วนหัว random” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม
ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ชนิดจำนวนเต็มเทียบกับชนิดเลขทศนิยม
- ส่วนหัว cmath: pow sqrt abs round
- ตัวเลขสุ่มด้วยส่วนหัว random
- ขีดจำกัดตัวเลขและพฤติกรรมเมื่อค่าล้น