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

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

วิธีการ:

Lua ให้การสนับสนุนในตัวเพื่อสร้างตัวเลขสุ่มผ่านฟังก์ชัน math.random ฟังก์ชันนี้สามารถใช้ได้หลายวิธีการ ขึ้นอยู่กับผลลัพธ์ที่ต้องการ:

  1. สร้างตัวเลขทศนิยมสุ่มระหว่าง 0 และ 1:
print(math.random())

ผลลัพธ์ตัวอย่างอาจเป็น 0.13117647051304 ทุกการเรียกใช้จะผลิตค่าที่แตกต่างกัน

  1. สร้างจำนวนเต็มสุ่มภายในช่วงที่ระบุ:

เพื่อผลิตจำนวนเต็มสุ่มระหว่างขอบเขตที่กำหนด รวมทั้งสองขอบเขต คุณต้องกำหนด seed โดยใช้ math.randomseed(os.time()) เพื่อความหลากหลาย จากนั้นเรียก math.random พร้อมอาร์กิวเมนต์สองตัว:

math.randomseed(os.time())
print(math.random(1, 10)) -- สร้างตัวเลขเต็มสุ่มระหว่าง 1 และ 10

ผลลัพธ์ตัวอย่างอาจเป็น 7 อีกครั้ง ผลลัพธ์จะเปลี่ยนแปลงไปด้วยการเรียกใช้งานทุกครั้ง

มันสำคัญมากที่จะต้องกำหนด seed ด้วย math.randomseed เพราะหากไม่มีมัน math.random อาจสร้างลำดับตัวเลขที่เหมือนกันทุกครั้งที่โปรแกรมทำงาน โดยปกติ การ seeding ด้วยเวลาปัจจุบัน os.time() จะรับประกันลำดับที่แตกต่างกันในทุกการเรียกใช้

ศึกษาลึกลงไป

กลไกที่อยู่เบื้องหลังการสร้างตัวเลขสุ่มใน Lua (และภาษาโปรแกรมมิ่งส่วนใหญ่) ไม่ใช่แบบสุ่มจริงๆ แต่เป็นเพียงสุ่มเทียม สร้างขึ้นโดยอัลกอริทึม เครื่องกำเนิดตัวเลขสุ่มเทียมเหล่านี้เป็นเชิงพิธีกรรมและต้องการค่า seed เพื่อเริ่มต้นลำดับการสร้างตัวเลข การเลือกการ seeding มีความสำคัญต่อคุณภาพของความสุ่ม ซึ่งเป็นเหตุผลที่การใช้เวลาปัจจุบันเป็นปฏิบัติที่นิยม

ในอดีต ความสามารถในการสร้างตัวเลขสุ่มของ Lua ได้พัฒนาขึ้น รุ่นก่อนหน้านี้ได้พึ่งพาฟังก์ชัน rand() ของไลบรารีมาตรฐานของ C ซึ่งคุณภาพและประสิทธิภาพแตกต่างกันไปตามการใช้งาน รุ่นปัจจุบันของ Lua ได้เพิ่มประสิทธิภาพด้วยการใช้กลไกที่เข้มแข็งมากขึ้นขึ้นอยู่กับแพลตฟอร์มที่อยู่ภายใต้ มอบความสอดคล้องและประโยชน์ในการสร้างตัวเลขสุ่มที่ดียิ่งขึ้น

สำหรับโปรเจกต์ที่ต้องการความสุ่มระดับ cryptographic ความสามารถในตัวของ Lua อาจไม่เพียงพอเนื่องจากธรรมชาติของ PRNGs ที่เป็นเชิงพิธีกรรม ในกรณีเช่นนี้ โปรแกรมเมอร์มักหันไปใช้ไลบรารีภายนอกหรือ API ที่เฉพาะเจาะจงของระบบที่สามารถให้ตัวเลขสุ่มที่ไม่เป็นเชิงพิธีกรรมได้ ซึ่งเหมาะกับแอปพลิเคชันที่มีความปลอดภัยสูง