C# Programming

Générer des nombres aléatoires en C# : Guide complet

Spread the love

Génération de nombres aléatoires en C# : Un guide complet

  1. Comprendre la classe Random
  2. Générer des nombres entiers aléatoires
  3. Générer des nombres à virgule flottante aléatoires
  4. Générer efficacement plusieurs nombres aléatoires
  5. Initialiser le générateur de nombres aléatoires
  6. Nombres aléatoires cryptographiquement sécurisés
  7. Conclusion
  8. FAQ

1. Comprendre la classe Random

La classe System.Random de C# est l’outil principal pour générer des nombres pseudo-aléatoires. Ce ne sont pas de vrais nombres aléatoires (nécessitant une source d’entropie physique), mais des séquences qui semblent aléatoires pour la plupart des applications. Elles sont générées de manière déterministe à partir d’une valeur initiale appelée seed (graine). La même graine produit la même séquence, utile pour le débogage mais crucial à retenir pour les applications nécessitant un véritable aléa.

2. Générer des nombres entiers aléatoires

La méthode principale est Random.Next(). Surcharges clés :

  • Next() : Renvoie un entier non négatif inférieur à int.MaxValue.
  • Next(maxValue) : Renvoie un entier non négatif inférieur à maxValue (maxValue doit être positif).
  • Next(minValue, maxValue) : Renvoie un entier ≥ minValue et < maxValue (maxValue > minValue).

Exemple :


using System;

public class RandomNumberGenerator
{
    public static void Main(string[] args)
    {
        Random random = new Random();

        int randomNumber1 = random.Next(10); // 0 à 9
        Console.WriteLine($"Nombre aléatoire 1 : {randomNumber1}");

        int randomNumber2 = random.Next(5, 15); // 5 à 14
        Console.WriteLine($"Nombre aléatoire 2 : {randomNumber2}");
    }
}

3. Générer des nombres à virgule flottante aléatoires

Pour générer des nombres à virgule flottante double précision aléatoires entre 0,0 (inclus) et 1,0 (exclu), utilisez random.NextDouble(). Mettez-les à l’échelle et décalez-les pour d’autres plages :


double randomNumber = random.NextDouble() * 100; // 0.0 à 100.0

4. Générer efficacement plusieurs nombres aléatoires

Réutilisez une seule instance de Random pour plus d’efficacité lors de la génération de nombreux nombres. La création de plusieurs instances rapidement (en utilisant le constructeur par défaut, initialisé par l’horloge système) peut conduire à des séquences similaires, réduisant l’apparente aléatoire.


Random random = new Random();
for (int i = 0; i < 10; i++)
{
    int randomNumber = random.Next(1, 101); // 1 à 100 (inclus)
    Console.WriteLine($"Nombre aléatoire {i + 1} : {randomNumber}");
}

5. Initialiser le générateur de nombres aléatoires

Contrôlez la séquence en fournissant une graine au constructeur Random :

  • Reproductibilité : Même graine = même séquence (essentiel pour les tests).
  • Séquences spécifiques : Utile pour les simulations.

Random random1 = new Random(12345);
Console.WriteLine($"Nombre aléatoire avec la graine 12345 : {random1.Next(100)}");

Random random2 = new Random(12345);
Console.WriteLine($"Nombre aléatoire avec la graine 12345 (à nouveau) : {random2.Next(100)}"); // Idem que ci-dessus

Random random3 = new Random(); // Heure actuelle comme graine
Console.WriteLine($"Nombre aléatoire avec la graine heure actuelle : {random3.Next(100)}");

6. Nombres aléatoires cryptographiquement sécurisés

Pour les applications sensibles à la sécurité, n’utilisez jamais System.Random. Utilisez plutôt System.Security.Cryptography.RandomNumberGenerator.

7. Conclusion

La classe Random fournit une génération facile de nombres pseudo-aléatoires. La compréhension de l’initialisation et de la réutilisation des instances est essentielle à la fois pour la reproductibilité et l’efficacité. Privilégiez les générateurs de nombres aléatoires cryptographiques pour la sécurité.

8. FAQ

Q : Les nombres sont-ils vraiment aléatoires ? R : Non, pseudo-aléatoires. Ils semblent aléatoires mais sont générés de manière déterministe.

Q : Comment générer des nombres à virgule flottante aléatoires ? R : Utilisez random.NextDouble() et mettez à l’échelle/décalez selon les besoins.

Q : Qu’en est-il des nombres aléatoires cryptographiquement sécurisés ? R : Utilisez System.Security.Cryptography.RandomNumberGenerator.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *