Tôi nghi ngờ câu trả lời là ' Vì toán học ', nhưng tôi đã hy vọng ai đó có thể cung cấp thêm một chút cái nhìn sâu sắc ở cấp độ cơ bản ...
Tôi đã tìm hiểu về mã nguồn BCL ngày hôm nay, xem xét một số lớp tôi đã sử dụng trước đây đã thực sự được triển khai như thế nào. Tôi chưa bao giờ nghĩ về cách tạo số ngẫu nhiên (giả) trước đây, vì vậy tôi quyết định xem nó đã được thực hiện như thế nào.
Nguồn đầy đủ ở đây: http://referencesource.microsoft.com/#mscorlib/system/random.cs#29
private const int MSEED = 161803398;
Giá trị MSEED này được sử dụng mỗi khi lớp Random () được gieo.
Dù sao, tôi đã thấy 'số ma thuật' này - 161803398 - và tôi không có ý tưởng rõ ràng nhất về lý do tại sao số đó được chọn. Đây không phải là số nguyên tố hay lũy thừa của 2. Nó không phải là 'một nửa' đối với một số có vẻ quan trọng hơn. Tôi nhìn nó ở dạng nhị phân và hex và tốt, nó trông giống như một con số đối với tôi.
Tôi đã thử tìm kiếm số trong Google, nhưng tôi không tìm thấy gì.
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.