Bonjour,
Voilà mon problème : j'ai besoin de mettre au point un système capable de générer des aléatoires (entiers) reproductibles. J'entends par là qu'ils sont générés à partir d'une chaîne et si on relance la fonction on retombe sur la même valeur.
Comme je n'ai besoin que d'aléatoires de petite taille (dans [0, 999] même souvent [0, 99]) J'ai essayé de me débrouiller avec une fonction crc32() dont je ne conservais que 2 ou 3 chiffres. Techniquement, ça marche très bien, en réinjectant la chaîne j'obtiens bien le même aléatoire, naturellement. Seulement je me suis aperçu que cette méthode ne couvrait pas toutes les valeurs de l'intervalle de résultats, il y a des trous. Par exemple si je la teste sur [1, 500], il va me couvrir au maximum 443 valeurs mais m'en laisser 57 de côté. Le hic c'est que j'ai impérativement besoin que tout l'intervalle soit couvert. Par ailleurs, je ne suis vraiment pas certain que la répartition soit équiprobable, à vue d'oeil et sur un nombre de résultats comparables, elle semble moins lisse que mt_rand().
Notons que la chaîne injectée est elle même un aléatoire mt_rand(1, 1000), lorsque je la modifie ou si j'essaye de lui simuler une sorte de fausse récursivité en lui injectant un premier résultat de mon aléatoire reproductible, ça n'a qu'une influence mineure sur le problème puisque l'intervalle n'est toujours pas parcouru intrégralement, seules les valeurs "absentes" changent. Bref, clairement le crc32 ne solutionnera pas mon problème.
Le projet est en PHP, j'aurais pu poster là-bas mais j'ai pensé que la solution serait en fin de compte plus mathématique/algorithmique que PHP donc je suis venu ici, n'hésitez pas à me déplacer si vraiment je suis hors-sujet. Merci.
Partager