Maison > développement back-end > Golang > le corps du texte

Pourquoi les nombres aléatoires se répètent-ils dans Go et comment pouvons-nous y remédier ?

Linda Hamilton
Libérer: 2024-10-25 09:14:02
original
914 Les gens l'ont consulté

Why Do Random Numbers Repeat in Go and How Can We Fix it?

Résolution de la répétition de nombres aléatoires dans Go

Dans Go, la génération de nombres aléatoires peut parfois entraîner une répétition inattendue, en particulier lors de l'utilisation de rand.Intn( n int) int pour générer des entiers aléatoires. Cela est attribué au fait que la source par défaut utilisée par les fonctions de nombres aléatoires de niveau supérieur, telles que rand.Intn, produit une séquence déterministe de valeurs lorsqu'un programme est exécuté consécutivement.

Pour résoudre ce problème, le La solution réside dans l'amorçage du générateur de nombres aléatoires à l'aide de la fonction rand.Seed(). L'amorçage fournit au générateur une valeur aléatoire qui sert de paramètre d'initialisation. Une pratique courante consiste à utiliser l'horodatage Unix actuel comme graine :

<code class="go">rand.Seed(time.Now().UnixNano())</code>
Copier après la connexion

Par exemple, au lieu de :

<code class="go">package main

import (
    "fmt"
    "math/rand"
)


func main() {
    fmt.Println(rand.Intn(10)) 
}</code>
Copier après la connexion

Qui renverra toujours le même nombre aléatoire, ensemençant le générateur garantira un nombre aléatoire différent pour chaque exécution :

<code class="go">package main

import (
    "fmt"
    "math/rand"
    "time"
)


func main() {
    rand.Seed(time.Now().UnixNano())
    fmt.Println(rand.Intn(10)) 
}</code>
Copier après la connexion

Rappelez-vous que sans appeler rand.Seed(), le générateur se comporte comme s'il était amorcé par la valeur 1, conduisant à la répétition de nombres aléatoires.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!