Sospetto che la risposta sia " A causa della matematica ", ma speravo che qualcuno potesse dare un po 'più di comprensione a un livello base ...
Stavo frugando nel codice sorgente BCL oggi, guardando come alcune delle classi che ho usato prima erano effettivamente implementate. Non avevo mai pensato a come generare numeri (pseudo) casuali prima, quindi ho deciso di vedere come è stato fatto.
Fonte completa qui: http://referencesource.microsoft.com/#mscorlib/system/random.cs#29
private const int MSEED = 161803398;
Questo valore MSEED viene utilizzato ogni volta che viene eseguita la seeding di una classe Random ().
Comunque, ho visto questo "numero magico" - 161803398 - e non ho la più pallida idea del perché quel numero sia stato selezionato. Non è un numero primo o una potenza di 2. Non è "a metà strada" per un numero che sembrava più significativo. L'ho guardato in binario ed esadecimale e beh, mi è sembrato solo un numero.
Ho provato a cercare il numero su Google, ma non ho trovato nulla.
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;
, ma il codice sorgente della Random
classe lo ha come se inextp = 21;
qualcuno lo avesse digitato male causando questo errore .