ฉันสงสัยว่าคำตอบคือ ' เพราะคณิตศาสตร์ ' แต่ฉันหวังว่าบางคนสามารถให้ข้อมูลเชิงลึกมากขึ้นในระดับพื้นฐาน ...
วันนี้ฉันไปโผล่มาในซอร์สโค้ด BCL ดูว่ามีบางคลาสที่ฉันใช้มาก่อนอย่างไรบ้าง ฉันไม่เคยคิดเกี่ยวกับวิธีการสร้างตัวเลขสุ่ม (หลอก) มาก่อนดังนั้นฉันจึงตัดสินใจว่าจะทำอย่างไร
แหล่งข้อมูลเต็มรูปแบบที่นี่: http://referencesource.microsoft.com/#mscorlib/system/random.cs#29
private const int MSEED = 161803398;
ค่า MSEED นี้ใช้ทุกครั้งที่มีการสุ่มคลาส () คลาส
อย่างไรก็ตามฉันเห็น 'หมายเลขเวทมนตร์' นี้ - 161803398 - และฉันไม่มีความคิดที่ผิดพลาดว่าเพราะเหตุใดจึงเลือกหมายเลขนั้น ไม่ใช่จำนวนเฉพาะหรือกำลังสองไม่ใช่จำนวนครึ่งทางที่ดูเหมือนจะสำคัญกว่า ฉันดูมันเป็นเลขฐานสองและเลขฐานสิบหกและมันก็ดูเหมือนตัวเลขกับฉัน
ฉันพยายามค้นหาหมายเลขใน Google แต่ไม่พบอะไรเลย
The current implementation of the Random class is based on Donald E. Knuth's subtractive random number generator algorithm. For more information, see D. E. Knuth. "The Art of Computer Programming, volume 2: Seminumerical Algorithms". Addison-Wesley, Reading, MA, second edition, 1981.
inextp = 31;
แต่ซอร์สโค้ดของRandom
คลาสนั้นเป็นinextp = 21;
เพราะมีบางคนพิมพ์ผิดมันทำให้เกิดข้อผิดพลาดนี้