Cos'è il generatore di numeri casuali in C #?

Un generatore di numeri casuali è una libreria integrata in C # che genera numeri interi e numeri in virgola mobile in modo casuale. Ogni volta che viene invocato il metodo pertinente della libreria, restituisce un numero casuale. Una serie di numeri casuali è un insieme di numeri che non seguono alcun modello. Il generatore di numeri casuali in C # tende a generare una tale serie ogni volta che viene invocato.

Classe casuale in C #

  • Quindi, come fa C # a generare una serie di numeri casuali? La risposta si trova nella classe casuale dello spazio dei nomi del sistema C #.
  • La classe casuale è una classe del generatore di numeri pseudo-casuale. Ciò significa che questa classe ha il compito di generare una serie di numeri che non seguono alcun modello. Ma una macchina è davvero in grado di generare numeri casuali? Come farebbe la macchina a sapere quale numero generare successivamente? Dopotutto, la macchina è progettata per seguire le istruzioni ed eseguire algoritmi.
  • No, la macchina non può generare numeri casuali da sola. Esiste un algoritmo matematico definito, basato sull'orologio e sullo stato attuali della macchina, che lo guida a scegliere i numeri da un set. Tutti i numeri nel set hanno la stessa probabilità di essere raccolti. Pertanto, non sono perfettamente casuali. Seguono uno schema. È solo che il modello è sufficientemente casuale per soddisfare i requisiti pratici umani.

Pseudo e sicuro

La domanda successiva che viene in mente è perché la chiamano classe generatore di numeri pseudo-casuali? Cerchiamo di capirlo attraverso il comportamento umano nella vita reale. Quando ad un essere umano viene chiesto di selezionare un colore casuale, prende un certo colore. Diciamo che ha scelto Yellow. Cosa lo ha spinto a scegliere il giallo? Potrebbe essere il suo colore preferito o il colore dei suoi dintorni, o avrebbe potuto pensare a qualcosa di giallo in quel momento. Questo comportamento umano che guida la decisione di scegliere qualcosa a caso è chiamato Seme nel mondo della casualità. Il seme è il fattore scatenante o il punto iniziale della casualità.

Ora, quando il seme è prevedibile, i numeri casuali diventano meno casuali. Vengono quindi chiamati numeri pseudo-casuali. Quando imprevedibili, sono chiamati numeri casuali sicuri.

La classe casuale C # usa il timestamp corrente come seed, che è molto prevedibile. E quindi, il termine classe generatore di numeri pseudo-casuali.

Classe RNGCryptoServiceProvider

La classe RNGCryptoServiceProvider dallo spazio dei nomi System.Security.Cryptography è in grado di generare numeri casuali sicuri, che possono essere utilizzati come password.

Funzioni del generatore di numeri casuali in C #

La prima cosa da generare un numero casuale in C # è inizializzare la classe Casuale. Questo può essere fatto da uno dei due costruttori della classe:

  • Casuale (): inizializza un oggetto della classe Casuale utilizzando un valore seed basato sul tempo. Il valore seed è il timestamp corrente della macchina. Sebbene, nelle versioni successive, questo è stato modificato per essere basato su GUID.
  • Casuale (Int32): inizializza un oggetto della classe Casuale utilizzando il valore seme specificato. Per ottenere il prossimo numero casuale dalla serie, chiamiamo il metodo Next () della classe Random.
  • Next (): restituisce un numero intero Int32 pseudo-casuale non negativo.
  • Successivo (Int32): restituisce un intero Int32 pseudo-casuale non negativo inferiore all'intero specificato.
  • Successivo (Int32, Int32): restituisce un intero Int32 pseudo-casuale non negativo all'interno dell'intervallo specificato.

Numero intero generatore di numeri casuali in C #

Vediamo un esempio di come generare numeri interi casuali:

Esempio 1

L'esempio seguente genera numeri Int32 casuali.

Codice:

using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static int GenerateRandomInt(Random rnd)
(
return rnd.Next();
)
)

Produzione:

Esempio n. 2

L'esempio seguente genera numeri Int32 casuali nell'intervallo da 0 a 100.

Codice:

using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static int GenerateRandomInt(Random rnd)
(
return rnd.Next(100);
)
)

Produzione:

Esempio n. 3

L'esempio seguente genera numeri Int32 casuali nell'intervallo da 50 a 100.

Codice:

using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static int GenerateRandomInt(Random rnd)
(
return rnd.Next(50, 100);
)
)

Produzione:

Generazione di numeri in virgola mobile

Vediamo un esempio di come generare numeri in virgola mobile casuali:

Esempio 1

L'esempio seguente genera numeri Int32 casuali.

Codice:

using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static double GenerateRandomInt(Random rnd)
(
return rnd.NextDouble();
)
)

Produzione:

Un errore molto comune

L'errore più comune che gli sviluppatori commettono durante la generazione di numeri casuali è che per ogni numero casuale, creano un nuovo oggetto di Classe casuale. Come illustrato nell'esempio seguente:

Esempio 1

Codice:

using System;
public class Program
(
public static void Main()
(
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt());
)
public static int GenerateRandomInt()
(
Random rnd = new Random(); //a very common mistake
return rnd.Next();
)
)

Produzione:

Come i numeri casuali sono tutti uguali e perché è successo?

Come spiegato nel funzionamento di Random Class, i numeri generati si basano sul valore seed e sullo stato corrente della macchina. Qualsiasi istanza della classe Random inizia con il valore seed, salva lo stato corrente e lo utilizza per generare il numero casuale successivo. Nel codice sopra, l'errore era quello di creare una nuova istanza della classe Random in ogni iterazione del ciclo. Quindi, prima che l'ora dell'orologio interno cambi, il codice viene eseguito completamente e ogni istanza della classe Random viene istanziata con lo stesso valore seed. Ciò si traduce nella stessa serie di numeri generati ogni volta.

Conclusione - Generatore di numeri casuali in C #

In questo articolo, abbiamo imparato a conoscere il generatore di numeri casuali in C # e come funziona internamente per generare numeri casuali. Abbiamo anche brevemente imparato il concetto di numeri pseudo-casuali e sicuri-casuali. Queste informazioni sono sufficienti per gli sviluppatori per utilizzare la classe Random nelle loro applicazioni. Immersione profonda, se interessati a esplorare di più su numeri casuali per password e password singole.

Articoli consigliati

Questa è una guida al generatore di numeri casuali in C #. Qui discutiamo di come funziona il generatore di numeri casuali, il concetto di numeri pseudo-casuali e sicuri-casuali e l'uso del numero casuale. Puoi anche consultare i nostri altri articoli correlati per saperne di più -

  1. Funzioni matematiche in C #
  2. Distruttore in C #
  3. Numero inverso in Python
  4. Variabili in C #
  5. Variabili in JavaScript
  6. Generatore di numeri casuali in Matlab
  7. Versioni del tableau
  8. Generatore di numeri casuali in JavaScript
  9. Generatore di numeri casuali in PHP

Categoria: