Lua:
การสร้างตัวเลขสุ่ม
วิธีการ:
Lua ให้การสนับสนุนในตัวเพื่อสร้างตัวเลขสุ่มผ่านฟังก์ชัน math.random
ฟังก์ชันนี้สามารถใช้ได้หลายวิธีการ ขึ้นอยู่กับผลลัพธ์ที่ต้องการ:
- สร้างตัวเลขทศนิยมสุ่มระหว่าง 0 และ 1:
print(math.random())
ผลลัพธ์ตัวอย่างอาจเป็น 0.13117647051304
ทุกการเรียกใช้จะผลิตค่าที่แตกต่างกัน
- สร้างจำนวนเต็มสุ่มภายในช่วงที่ระบุ:
เพื่อผลิตจำนวนเต็มสุ่มระหว่างขอบเขตที่กำหนด รวมทั้งสองขอบเขต คุณต้องกำหนด 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 ที่เฉพาะเจาะจงของระบบที่สามารถให้ตัวเลขสุ่มที่ไม่เป็นเชิงพิธีกรรมได้ ซึ่งเหมาะกับแอปพลิเคชันที่มีความปลอดภัยสูง