0Pricing
C++ Academy · บทเรียน

ตัวเลขสุ่มด้วยส่วนหัว 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ชนิดจำนวนเต็มเทียบกับชนิดเลขทศนิยม
  2. ส่วนหัว cmath: pow sqrt abs round
  3. ตัวเลขสุ่มด้วยส่วนหัว random
  4. ขีดจำกัดตัวเลขและพฤติกรรมเมื่อค่าล้น
← กลับไปที่ C++ Academy