Comprendre la génération de nombres aléatoires identiques dans Go's rand.Intn()
Pourquoi rand.Intn() génère-t-il systématiquement le même nombre aléatoire ? Cette question se pose souvent pour les débutants utilisant Go en raison du code suivant :
<code class="go">package main import ( "fmt" "math/rand" ) func main() { fmt.Println(rand.Intn(10)) }</code>
Malgré la documentation prétendant fournir un nombre pseudo-aléatoire dans la plage [0, n), le programme imprime le même nombre tous les temps.
Amorçage de la génération de nombres aléatoires
La clé réside dans l'amorçage correct du générateur de nombres aléatoires. Le comportement par défaut consiste à utiliser une graine déterministe, ce qui entraîne la même séquence de nombres lors des exécutions du programme. Pour remédier à cela :
<code class="go">rand.Seed(time.Now().UnixNano())</code>
Cette fonction initialise le générateur de nombres aléatoires avec une graine basée sur l'horodatage Unix actuel. Il garantit une séquence de nombres différente pour chaque exécution.
Comprendre la documentation
La documentation de rand.Intn() indique : "Fonctions de niveau supérieur... produire une séquence déterministe de valeurs à chaque fois qu'un programme est exécuté. Par conséquent, sans amorçage explicite, le générateur agit comme s'il était amorcé par 1, conduisant à des résultats prévisibles.
Conclusion
En ensemençant le générateur de nombres aléatoires avant d'utiliser rand.Intn (), vous pouvez surmonter le problème de la répétition des nombres aléatoires, en garantissant une génération appropriée de séquences non déterministes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!