Génération déterministe de nombres aléatoires dans Go
Dans Go, appeler rand.Intn(n int) int sans amorcer le générateur de nombres aléatoires sera toujours renvoie la même séquence de nombres. En effet, la source par défaut utilisée pour la génération de nombres aléatoires est initialisée avec une valeur de départ fixe, ce qui la rend effectivement déterministe.
Pourquoi cela se produit-il ?
Comme mentionné dans le documentation officielle, la fonction rand.Intn renvoie un nombre pseudo-aléatoire, qui est généré à l'aide d'un algorithme déterministe et d'une valeur de départ. Si la valeur de départ n'est pas spécifiée, la valeur de départ par défaut de 1 est utilisée, conduisant à la génération de la même série de nombres à chaque exécution.
Amorçage correct de la génération de nombres aléatoires
Pour générer des nombres véritablement aléatoires, il est crucial d'amorcer le générateur de nombres aléatoires avec une graine différente pour chaque exécution. Ceci peut être réalisé en appelant la fonction rand.Seed() et en lui transmettant une valeur de départ aléatoire. Une pratique courante consiste à utiliser l'horodatage Unix actuel comme graine, ce qui garantit que le générateur est initialisé avec une valeur unique pour chaque exécution.
Exemple :
<code class="go">import ( "fmt" "math/rand" "time" ) func main() { rand.Seed(time.Now().UnixNano()) fmt.Println(rand.Intn(10)) }</code>
Conclusion
En amorceant correctement le générateur de nombres aléatoires, vous pouvez vous assurer que vos programmes Go génèrent des nombres véritablement aléatoires, les rendant imprévisibles et plus représentatifs du véritable hasard.
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!