เอนจินจาวาสคริปต์ V8 ที่เป็นพื้นฐานสำคัญของโครม อิมพลีเมนต์ฟังก์ชั่น Math.random() ด้วยฟังก์ชั่น MWC1616 มาโดยตลอด แต่หลังจากรุ่น 4.9.41.0 จะปรับเป็นฟังก์ชั่น xorshift128+
ฟังก์ชั่น MWC1616 ทำงานได้เร็วและเรียบง่าย แต่ปริมาณเลขสุ่มที่ผลิตได้ก่อนจะเริ่มซ้ำไม่มากนัก ในกรณีที่ดีที่สุดอาจจะได้ถึง 2^32 บิต แต่บางสถานะเริ่มต้นก็สร้างเลขซ้ำหลังจากสุ่มไปเพียง 40 ล้านบิต ในแง่สถิติแล้วก็มีคุณสมบัติไม่ดีนัก ขณะที่ฟังก์ชั่น xorshift128+ มีคุณบัติที่ดีกว่ามาก สามารถสร้างเลขสุ่มได้ถึง 2^128 - 1 บิต และคุณสมบัติทางสถิติก็ดีกว่า
ทาง V8 ย้ำกว่า xorshift128+ ยังไม่ดีพอสำหรับการใช้งานเพื่อการเข้ารหัส และหากใช้เพื่อสร้างกุญแจเข้ารหัส ควรใช้ฟังก์ชั่น window.crypto.getRandomValues ที่สร้างเลขสุ่มได้ดีกว่าแทน โดยจะแลกกับระยะเวลาสร้างเลขสุ่มที่นานขึ้น
ที่มา - V8 Project
ภาพแสดงรูปแบบของเลขสุ่มที่ได้จาก Math.random ใน V8 ก่อนและหลังจากเปลี่ยนฟังก์ชั่น โดย Mike Malone
Comments
สมบัติิ -> สมบัติ
คุณบัติ -> คุณสมบัติ
บล็อกส่วนตัวที่อัพเดตตามอารมณ์และความขยัน :P
การกระจายตัวดีขึ้นเยอะเลย
เขียน HTML5 app มาไม่ยักรู้ว่ามัน กระจุกตัว ไม่เคยเทส distribution