Maison > développement back-end > C++ > Pourquoi mon générateur de nombres aléatoires ne produit-il qu'un seul numéro unique?

Pourquoi mon générateur de nombres aléatoires ne produit-il qu'un seul numéro unique?

Barbara Streisand
Libérer: 2025-02-03 08:31:09
original
565 Les gens l'ont consulté

Why Does My Random Number Generator Only Produce One Unique Number?

Dépannage d'un générateur de nombres aléatoires produisant des nombres répétés

Votre générateur de nombres aléatoires (RNG) semble générer un seul numéro unique malgré l'utilisation d'une boucle. Le débogage révèle différents nombres lors de l'exécution de la boucle, mais une fois terminé, tous les éléments du tableau maintiennent la même valeur.

Le problème découle de la création d'une nouvelle instance Random dans chaque itération de boucle. Étant donné que Random est souvent ensemencé à l'aide de l'horloge du système, une boucle rapidement exécutée peut initialiser à plusieurs reprises l'objet Random avec la même graine, conduisant à des sorties identiques.

La solution: une seule instance partagée

Le correctif implique l'utilisation d'une seule instance statique Random sur tous les appels. Cela garantit des mises à jour d'état cohérentes et empêche les valeurs de graines répétées. Pour gérer les scénarios multi-thread en toute sécurité, une serrure est utilisée pour synchroniser l'accès.

Voici la fonction corrigée RandomNumber:

<code class="language-csharp">private static readonly Random random = new Random();
private static readonly object syncLock = new object();

public static int RandomNumber(int min, int max)
{
    lock (syncLock) { // Thread-safe access
        return random.Next(min, max);
    }
}</code>
Copier après la connexion

En utilisant une seule instance random et en synchroniser l'accès avec lock, le RNG conservera son état interne, produisant des nombres aléatoires uniques sur chaque appel dans la boucle.

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