Je soupçonne que la réponse est `` à cause des mathématiques '', mais j'espérais que quelqu'un pourrait donner un peu plus d'informations à un niveau de base ...
J'étais en train de fouiller dans le code source de BCL aujourd'hui, pour voir comment certaines des classes que j'ai utilisées auparavant étaient réellement implémentées. Je n'avais jamais pensé à générer des nombres (pseudo) aléatoires auparavant, j'ai donc décidé de voir comment cela se faisait.
Source complète ici: http://referencesource.microsoft.com/#mscorlib/system/random.cs#29
private const int MSEED = 161803398;
Cette valeur MSEED est utilisée chaque fois qu'une classe Random () est amorcée.
Quoi qu'il en soit, j'ai vu ce «nombre magique» - 161803398 - et je n'ai pas la moindre idée de la raison pour laquelle ce nombre a été sélectionné. Ce n'est pas un nombre premier ou une puissance de 2. Ce n'est pas «à mi-chemin» d'un nombre qui semblait plus significatif. Je l'ai regardé en binaire et en hexadécimal et bien, cela ressemblait à un nombre pour moi.
J'ai essayé de rechercher le numéro dans Google, mais je n'ai rien trouvé.
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;
, mais le code source de la Random
classe l'a comme inextp = 21;
parce que quelqu'un l'a mal tapé à l'origine de ce bogue .