เชิงเส้นระยะยาวที่มีการกระจายตัวอย่างสม่ำเสมอ
Well Equidistributed Long-period Linear (WELL)คือตระกูลของตัวสร้างเลขสุ่มเทียมที่พัฒนาขึ้นในปี 2549 โดยFrançois Panneton , Pierre L'EcuyerและMakoto Matsumoto(松本眞) . [ 1 ]มันเป็นรูปแบบหนึ่งของการลงทะเบียนกะข้อเสนอแนะเชิงเส้นที่ปรับให้เหมาะสมสำหรับการใช้งานซอฟต์แวร์บนเครื่อง 32 บิต
การออกแบบเชิงปฏิบัติการ
โครงสร้างนี้คล้ายกับMersenne Twisterซึ่งเป็นสถานะขนาดใหญ่ที่ประกอบด้วยคำเอาต์พุตก่อนหน้า (32 บิตต่อคำ) จากนั้นจึงสร้างคำเอาต์พุตใหม่โดยใช้ความสัมพันธ์เวียนเกิด เชิงเส้น แบบโมดูลัส 2 บนฟิลด์ไบนารี จำกัดอย่างไรก็ตาม ความสัมพันธ์เวียนเกิดที่ซับซ้อนกว่าจะสร้างพหุนามกำเนิดที่หนาแน่นกว่า ซึ่งให้คุณสมบัติทางสถิติที่ดีกว่า
ในแต่ละขั้นตอนของตัวสร้าง จะอ่านคำของสถานะห้าคำ ได้แก่ 32 บิตที่เก่าที่สุด (ซึ่งอาจคร่อมขอบเขตของคำได้หากขนาดของสถานะไม่ใช่จำนวนเท่าของ 32) 32 บิตที่ใหม่ที่สุด และอีกสามคำที่อยู่ระหว่างนั้น
จากนั้นเป็นการแปลงคำเดี่ยวแปดคำ (ส่วนใหญ่เป็นรูปแบบ...)และการดำเนินการแบบ exclusive-or หกครั้งจะรวมคำเหล่านั้นเข้าด้วยกันเป็นสองคำ ซึ่งจะกลายเป็นคำสถานะสองคำใหม่ล่าสุด โดยคำหนึ่งจะเป็นผลลัพธ์
ตัวแปร
มีการกำหนดพารามิเตอร์เฉพาะสำหรับเครื่องกำเนิดไฟฟ้าต่อไปนี้:
- เวลล์512เอ
- เวลล์521a, เวลล์521b
- เวลล์607เอ, เวลล์607บี
- เวลล์800a, เวลล์800b
- เวลล์1024a, เวลล์1024b
- เวล19937a, เวล19937b, เวล19937c
- เวลล์21701a
- เวลล์23209a, เวลล์23209b
- WELL44497a, WELL44497b.
ตัวเลขระบุขนาดของสถานะในหน่วยบิต ตัวอักษรต่อท้ายแสดงถึงรูปแบบต่างๆ ที่มีขนาดเท่ากัน
การนำไปใช้
- ตัวอย่างการใช้งาน WELL512a, WELL1024a, WELL19937a, WELL19937c, WELL44497a, WELL44497b ในภาษาซี (ใช้งานได้ฟรีสำหรับการใช้งานที่ไม่ใช่เชิงพาณิชย์)
- การนำอัลกอริธึมเดียวกันไปใช้ในภาษา Scala
- การใช้งานในภาษา C++
- การนำ WELL512, WELL1024 และ WELL607 ไปใช้งานในภาษา Java
- การนำ WELL512 และ WELL1024 ไปใช้ใน BBC BASIC
- การใช้งาน WELL19937 และ WELL44497 ในรูปแบบ "กระจายอย่างเท่าเทียมที่สุด" ที่ได้รับการดัดแปลงในภาษา C (ใช้งานได้ฟรีสำหรับการใช้งานที่ไม่ใช่เชิงพาณิชย์)
- การนำ WELL512 ไปใช้ในภาษาซี (สาธารณสมบัติ)
ลิงก์ภายนอก
- บทความวิชาการและบทความที่เกี่ยวข้องโดย François Panneton
- สิ่งพิมพ์ของ Pierre L'Ecuyer