Un algorithme approprié PRNG (générateur de nombres pseudo aléatoires) aura un temps de cycle au cours de laquelle il ne sera jamais dans le même état. Si vous exposez tout l'état du PRNG du nombre récupéré de celui-ci, vous obtiendrez un nombre garanti unique pour la période du générateur.
Un PRNG simple qui fait ce qu'on appelle le « linéaire Congruential PRNG » une formule , qui le fait :
X(i) = AX(i-1)|M
En utilisant la bonne paire de facteurs, vous pouvez obtenir une période de 2 ^ 30 (environ 1 milliard) d'un PRNG simple avec un accumulateur 32 bits. Notez que vous aurez besoin d'une variable temporaire long long 64 bits pour maintenir la partie « AX » intermédiaire du calcul. La plupart, sinon tous les compilateurs C soutiendront ce type de données. Vous devez également être en mesure de le faire avec un type de données numériques sur la plupart des dialectes SQL.
Avec les bonnes valeurs de A et M, nous pouvons obtenir un générateur de nombres aléatoires avec de bonnes propriétés statistiques et géométriques. Il y a un célèbre sur ce écrit par Fishman et Moore.
M = 2 ^ 31-1 nous obtenons peut utiliser les valeurs de A ci-dessous pour obtenir un PRNG avec une longue période agréable (2 ^ 30 IIRC).
De bonnes valeurs de A:
742,938,285
950,706,376
1,226,874,159
62,089,911
1,343,714,438
Notez que ce type de générateur est (par définition) ne cryptographiquement sûr. Si vous connaissez le dernier numéro généré par ce que vous pouvez prédire ce qu'il fera ensuite. Malheureusement , je crois que vous ne pouvez pas obtenir la sécurité cryptographique et la non-reproductibilité garantie en même temps. Pour un PRNG être cryptographiquement sûre (par exemple Blum Blum Shub ) il ne peut pas exposer l' état suffisant dans un certain nombre généré pour permettre le numéro suivant dans la séquence à prédire. Par conséquent , l'état interne est plus large que le nombre généré et (afin d'avoir une bonne sécurité) la période sera plus longue que le nombre de valeurs possibles qui peuvent être générés. Cela signifie que le nombre exposé ne sera pas unique dans la période.
Pour des raisons similaires , la même chose est vraie des générateurs de longue période, comme le Mersenne Twister.