Co to jest generator liczb losowych w C #?

Generator liczb losowych to wbudowana biblioteka w języku C #, która losowo generuje liczby całkowite i liczby zmiennoprzecinkowe. Za każdym razem, gdy wywoływana jest odpowiednia metoda biblioteki, zwraca losową liczbę. Szereg liczb losowych to zestaw liczb, które nie są zgodne z żadnym wzorem. Generator liczb losowych w języku C # ma tendencję do generowania takiej serii przy każdym wywołaniu.

Losowa klasa w C #

  • Jak więc C # generuje serię liczb losowych? Odpowiedź leży w losowej klasie przestrzeni nazw systemu C #.
  • Klasa losowa to klasa generatora liczb pseudolosowych. Oznacza to, że zadaniem tej klasy jest wygenerowanie szeregu liczb, które nie są zgodne z żadnym wzorcem. Ale czy maszyna naprawdę jest w stanie generować liczby losowe? Skąd maszyna wiedziałaby, który numer wygenerować następnie? W końcu maszyna jest zaprojektowana tak, aby postępować zgodnie z instrukcjami i wykonywać algorytmy.
  • Nie, maszyna nie może sama generować liczb losowych. Istnieje zdefiniowany algorytm matematyczny oparty na bieżącym zegarze i stanie maszyny, który prowadzi go do wybierania liczb z zestawu. Wszystkie liczby w zestawie mają jednakowe prawdopodobieństwo znalezienia. Dlatego nie są one całkowicie przypadkowe. Postępują według wzoru. Tyle, że wzór jest wystarczająco losowy, aby spełnić praktyczne ludzkie wymagania.

Pseudo i bezpiecznie

Kolejne pytanie, jakie przychodzi do głowy, to dlaczego nazywają to klasą generatora liczb pseudolosowych? Pozwól nam to zrozumieć poprzez rzeczywiste ludzkie zachowanie. Kiedy człowiek jest proszony o wybranie losowego koloru, wybiera określony kolor. Powiedzmy, że wybrał żółty. Co spowodowało, że wybrał żółty? Może to być jego ulubiony kolor lub kolor jego otoczenia, albo mógł wtedy myśleć o czymś żółtym. To ludzkie zachowanie, które napędza decyzję o losowym wybraniu czegoś, nazywa się Nasieniem w świecie losowości. Ziarno jest wyzwalaczem lub punktem początkowym losowości.

Teraz, gdy ziarno jest przewidywalne, liczby losowe stają się mniej losowe. Są one następnie nazywane liczbami pseudolosowymi. Gdy są nieprzewidywalne, nazywane są liczbami losowo bezpiecznymi.

C # Random Class wykorzystuje bieżący znacznik czasu jako ziarno, co jest bardzo przewidywalne. I stąd termin klasa generatora liczb pseudolosowych.

Klasa RNGCryptoServiceProvider

Klasa RNGCryptoServiceProvider z przestrzeni nazw System.Security.Cryptography jest w stanie generować bezpieczne liczby losowe, które mogą być używane jako hasła.

Funkcje generatora liczb losowych w C #

Pierwszą rzeczą do wygenerowania liczby losowej w języku C # jest zainicjowanie klasy Random. Może to zrobić dowolny z dwóch konstruktorów klasy:

  • Random (): Inicjuje obiekt klasy Random przy użyciu wartości początkowej opartej na czasie. Wartość początkowa jest bieżącym znacznikiem czasu maszyny. Chociaż w późniejszych wersjach zmieniono to na GUID.
  • Random (Int32): Inicjuje obiekt klasy Random przy użyciu określonej wartości początkowej. Aby uzyskać kolejny losowy numer z serii, wywołujemy metodę Next () klasy Random.
  • Next (): Zwraca nieujemną pseudolosową liczbę całkowitą Int32.
  • Dalej (Int32): Zwraca nieujemną pseudolosową liczbę całkowitą Int32 mniejszą niż podana liczba całkowita.
  • Dalej (Int32, Int32): Zwraca nieujemną pseudolosową liczbę całkowitą Int32 z określonego zakresu.

Liczby całkowite generatora liczb losowych w C #

Zobaczmy przykład generowania losowych liczb całkowitych:

Przykład 1

Poniższy przykład generuje losowe liczby Int32.

Kod:

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();
)
)

Wynik:

Przykład nr 2

Poniższy przykład generuje losowe liczby Int32 w zakresie od 0 do 100.

Kod:

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);
)
)

Wynik:

Przykład nr 3

Poniższy przykład generuje losowe liczby Int32 w zakresie od 50 do 100.

Kod:

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);
)
)

Wynik:

Generowanie liczb zmiennoprzecinkowych

Zobaczmy przykład generowania losowych liczb zmiennoprzecinkowych:

Przykład 1

Poniższy przykład generuje losowe liczby Int32.

Kod:

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();
)
)

Wynik:

Bardzo częsty błąd

Najczęstszym błędem popełnianym przez programistów podczas generowania liczb losowych jest to, że dla każdej liczby losowej tworzą nowy obiekt klasy losowej. Jak pokazano w poniższym przykładzie:

Przykład 1

Kod:

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();
)
)

Wynik:

Jak wszystkie liczby losowe są takie same i dlaczego tak się stało?

Jak wyjaśniono w pracy Random Class, generowane liczby są oparte na wartości początkowej i bieżącym stanie maszyny. Każde wystąpienie klasy Random zaczyna się od wartości początkowej, zapisuje bieżący stan i używa go do wygenerowania następnej liczby losowej. W powyższym kodzie błędem było utworzenie nowej instancji klasy Random w każdej iteracji pętli. Zatem przed zmianą czasu w zegarze wewnętrznym kod jest w pełni wykonywany, a każda instancja klasy Random jest tworzona z tą samą wartością początkową. Daje to ten sam zestaw liczb generowany za każdym razem.

Wniosek - generator liczb losowych w C #

W tym artykule dowiedzieliśmy się o generatorze liczb losowych w języku C # i o tym, jak wewnętrznie działa generowanie liczb losowych. Krótko nauczyliśmy się także pojęcia liczb pseudolosowych i bezpiecznych losowo. Informacje te są wystarczające, aby programiści mogli użyć klasy Random w swoich aplikacjach. Głębokie nurkowanie, jeśli chcesz dowiedzieć się więcej na temat losowych liczb haseł i haseł jednorazowych.

Polecane artykuły

Jest to przewodnik po Generatorze liczb losowych w C #. Tutaj omawiamy działanie Generatora liczb losowych, koncepcję liczb pseudolosowych i liczb bezpiecznych-losowych oraz zastosowanie liczb losowych. Możesz również przejrzeć nasze inne powiązane artykuły, aby dowiedzieć się więcej -

  1. Funkcje matematyczne w C #
  2. Niszczyciel w C #
  3. Odwrotna liczba w Pythonie
  4. Zmienne w C #
  5. Zmienne w JavaScript
  6. Generator liczb losowych w Matlabie
  7. Wersje Tableau
  8. Generator liczb losowych w JavaScript
  9. Generator liczb losowych w PHP