tooliv

เครื่องสร้างตัวเลขสุ่ม

สร้างตัวเลขสุ่มด้วยช่วงและจำนวนที่กำหนดเอง

เรียง

เครื่องสร้างตัวเลขสุ่ม

Math.random() สุ่มแค่ไหน?

สุ่มเทียม การกระจายทางสถิติดี แต่สามารถทำนายได้ถ้ารู้ค่า seed ใช้ crypto.getRandomValues() สำหรับความปลอดภัย เพราะใช้ entropy pool ของระบบปฏิบัติการ

สูตรทอยลูกเต๋า?

Math.floor(Math.random() * 6) + 1 สร้างเลขจำนวนเต็ม 1-6 เท่ากัน สำหรับโยนเหรียญใช้ Math.round(Math.random()) เพื่อได้ 0 หรือ 1

สร้างหมายเลขลอตเตอรี่ได้อย่างไร?

ใช้ Fisher-Yates บนอาร์เรย์ [1..45] เลือก 6 ตัวแรก วิธีนี้ให้ชุดตัวเลขสุ่มที่ไม่ซ้ำกันอย่างสมบูรณ์

ตัวเลขสุ่ม: จริงและเทียม

คอมพิวเตอร์มักใช้ "ตัวเลขสุ่มเทียม" — Math.random() ใช้อัลกอริทึมแบบกำหนดได้จากค่า seed เพื่อสร้างลำดับที่ดูเหมือนสุ่ม ตัวเลขสุ่มจริงต้องการ entropy จากปรากฏการณ์ทางกายภาพ เช่น การสลายตัวของสารกัมมันตรังสีหรือสัญญาณรบกวนความร้อน สำหรับเกมและการจำลอง ตัวเลขสุ่มเทียมเพียงพอ แต่ในเข้ารหัสวิทยา ความแตกต่างนี้สำคัญมาก

ทำไม Math.random() ไม่ปลอดภัยสำหรับรหัสผ่าน?

ถ้าผู้โจมตีหาค่า seed ของ Math.random() ได้ ก็สามารถสร้างซ้ำค่า "สุ่ม" ทั้งหมดได้ รวมถึง token, session ID และลิงก์รีเซ็ตรหัสผ่าน crypto.getRandomValues() ของ Web Crypto API ใช้ entropy pool ของระบบปฏิบัติการจึงเหมาะสำหรับแอปที่ต้องการความปลอดภัย

Fisher-Yates Shuffle: การสุ่มโดยไม่ซ้ำ

Fisher-Yates วนจากท้ายอาร์เรย์ ในแต่ละขั้นตอนสลับตำแหน่งปัจจุบันกับตำแหน่งสุ่มที่ยังไม่ประมวลผล ใช้เวลา O(n) วิธีแบบง่าย "สร้างแล้วตรวจซ้ำ" จะช้าลงเมื่อใกล้ถึงขีดจำกัด แต่ Fisher-Yates ทำงานเชิงเส้นเสมอ

การกระจายแบบสม่ำเสมอ

ตัวสร้างตัวเลขสุ่มที่ดีสร้างการกระจายแบบสม่ำเสมอ ทุกค่าในช่วงมีโอกาสเท่ากัน สูตรจำนวนเต็ม: Math.floor(Math.random() * (max - min + 1)) + min หากต้องการการกระจายแบบปกติหรือ Poisson สำหรับจำลองปรากฏการณ์ธรรมชาติ ต้องใช้การแปลงเพิ่มเติมเช่น Box-Muller

ความสุ่มในเกมและการพนัน

ข้อได้เปรียบของบ้านในคาสิโนมาจากการออกแบบทางคณิตศาสตร์ ไม่ใช่การโกงตัวเลขสุ่ม วงล้อรูเล็ตมี 37 ช่อง (0-36) เมื่อออก 0 บ้านเก็บเดิมพันทั้งหมด ทำให้มีข้อได้เปรียบ 2.7% การพนันออนไลน์ต้องใช้ตัวสร้างตัวเลขสุ่มที่ผ่านการรับรองจากบุคคลที่สาม

คำถามที่พบบ่อย

Math.random() สุ่มแค่ไหน?

สุ่มเทียม การกระจายทางสถิติดี แต่สามารถทำนายได้ถ้ารู้ค่า seed ใช้ crypto.getRandomValues() สำหรับความปลอดภัย เพราะใช้ entropy pool ของระบบปฏิบัติการ

สูตรทอยลูกเต๋า?

Math.floor(Math.random() * 6) + 1 สร้างเลขจำนวนเต็ม 1-6 เท่ากัน สำหรับโยนเหรียญใช้ Math.round(Math.random()) เพื่อได้ 0 หรือ 1

สร้างหมายเลขลอตเตอรี่ได้อย่างไร?

ใช้ Fisher-Yates บนอาร์เรย์ [1..45] เลือก 6 ตัวแรก วิธีนี้ให้ชุดตัวเลขสุ่มที่ไม่ซ้ำกันอย่างสมบูรณ์

เครื่องมือที่เกี่ยวข้อง