Podejrzewam, że odpowiedź brzmi `` z powodu matematyki '', ale miałem nadzieję, że ktoś mógłby dać trochę więcej wglądu na podstawowym poziomie ...
Grzebałem dzisiaj w kodzie źródłowym BCL, przyglądając się, jak niektóre z klas, których używałem wcześniej, zostały faktycznie zaimplementowane. Nigdy wcześniej nie myślałem o tym, jak generować (pseudo) losowe liczby, więc postanowiłem zobaczyć, jak to się robi.
Pełne źródło tutaj: http://referencesource.microsoft.com/#mscorlib/system/random.cs#29
private const int MSEED = 161803398;
Ta wartość MSEED jest używana za każdym razem, gdy klasa Random () jest inicjowana.
W każdym razie widziałem tę „magiczną liczbę” - 161803398 - i nie mam pojęcia, dlaczego ta liczba została wybrana. Nie jest to liczba pierwsza ani potęga 2. Nie jest to „połowa” liczby, która wydawała się bardziej znacząca. Spojrzałem na to w systemie binarnym i heksadecymalnym i cóż, po prostu wyglądał jak liczba.
Próbowałem wyszukać numer w Google, ale nic nie znalazłem.
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;
, ale kod źródłowy Random
klasy ma to, inextp = 21;
ponieważ ktoś błędnie go wpisał, powodując ten błąd .