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 laRandom
classe l'a commeinextp = 21;
parce que quelqu'un l'a mal tapé à l'origine de ce bogue .Réponses:
Non, mais il est basé sur Phi (le «nombre d'or»).
En savoir plus sur le nombre d'or ici .
Et une très bonne lecture pour le mathématicien occasionnel ici .
Et j'ai trouvé un document de recherche sur les générateurs de nombres aléatoires qui est d'accord avec cette affirmation. (Voir page 53.)
la source
"One can’t even fathom the repercussions if security flaws in the implementation (or design) of the SSL protocol are to be found."
(page 4)Ce nombre est tiré du nombre d' or 1.61803398 * 10 ^ 8 . Matt a donné une belle réponse à propos de ce nombre, donc je vais juste expliquer un peu un algorithme.
Ce n'est pas un numéro spécial pour cet algorithme. L'algorithme est l' algorithme de générateur de nombres aléatoires soustractif de Knuth et ses principaux points sont:
Le générateur est basé sur la récursivité suivante: X n = (X n-55 - X n-24 ) mod m, où n ≥ 0. Il s'agit d'un cas partiel de générateur de Fibonacci retardé : X n = (X n-j @ X n-k ) mod m, où 0 <k <j et @ est toute opération binaire (soustraction, addition, xor).
Il existe plusieurs implémentations de ce générateur. Knuth propose une implémentation en FORTRAN dans son livre. J'ai trouvé le code suivant , avec le commentaire suivant:
Un peu plus peut être trouvé ici Notez que ce n'est pas en fait un document de recherche (comme indiqué par Math), c'est juste une thèse de maîtrise.
Les gens dans la cryptographie à utiliser comme nombre irrationnel (
pi
,e
,sqrt(5)
) parce qu'il ya une conjecture que les chiffres de ces chiffres apparaît avec une fréquence égale et ont donc forte entropie . Vous pouvez trouver cette question connexe sur security stackexchange pour en savoir plus sur ces nombres. Voici un devis:la source