Co je generátor náhodných čísel v C #?

Generátor náhodných čísel je vestavěná knihovna v C #, která náhodně generuje celá čísla a čísla s pohyblivou řádovou čárkou. Při každém vyvolání příslušné metody knihovny vrací náhodné číslo. Řada náhodných čísel je sada čísel, která nesledují žádný vzor. Generátor náhodných čísel v C # má tendenci generovat takovou řadu vždy, když je vyvolána.

Náhodná třída v C #

  • Jak tedy generuje C # řadu náhodných čísel? Odpověď leží v rámci náhodné třídy oboru názvů C #.
  • Náhodná třída je třída generátoru pseudonáhodných čísel. To znamená, že úkolem této třídy je generovat řadu čísel, která nesledují žádný vzor. Je však stroj skutečně schopen generovat náhodná čísla? Jak by stroj věděl, které číslo vygenerovat dále? Nakonec je stroj navržen tak, aby se řídil pokyny a prováděl algoritmy.
  • Ne, stroj nemůže generovat náhodná čísla samostatně. Existuje definovaný matematický algoritmus založený na aktuálních hodinách a stavu stroje, který jej vede k výběru čísel ze sady. Všechna čísla v sadě mají stejnou pravděpodobnost, že budou vyzvednuta. Nejsou tedy zcela náhodní. Postupují podle vzoru. Je to jen tak, že vzor je dostatečně náhodný, aby splňoval praktické lidské požadavky.

Pseudo a bezpečné

Další otázka, která přichází na mysl, je, proč tomu říkají pseudonáhodná třída generátoru čísel? Rozumíme tomu prostřednictvím lidského chování v reálném životě. Když je člověk požádán, aby vybral náhodnou barvu, zvedne určitou barvu. Řekněme, že vybral žlutou. Co ho přimělo vybrat žlutou? Mohla to být jeho oblíbená barva nebo barva jeho okolí, nebo mohl v té době myslet na něco žlutého. Toto lidské chování, které řídí rozhodnutí vybrat něco náhodně, se nazývá semeno ve světě náhodnosti. Semeno je spouštěcí bod nebo počáteční bod náhodnosti.

Nyní, když je semeno předvídatelné, jsou náhodná čísla méně náhodná. Pak se nazývají pseudonáhodná čísla. Pokud je to nepředvídatelné, nazývají se náhodná čísla.

C # Random Class používá aktuální časové razítko jako zárodek, což je velmi předvídatelné. A odtud také pojem generátor pseudonáhodných čísel.

Třída RNGCryptoServiceProvider

Třída RNGCryptoServiceProvider z oboru názvů System.Security.Cryptography dokáže generovat bezpečná náhodná čísla, která lze použít jako hesla.

Funkce generátoru náhodných čísel v C #

První věcí, která vygeneruje náhodné číslo v C #, je inicializace náhodné třídy. To může provést kterýkoli ze dvou konstruktérů třídy:

  • Random (): Inicializuje objekt třídy Random pomocí počáteční hodnoty semen. Počáteční hodnota je aktuální časové razítko stroje. Ačkoli v novějších verzích to bylo změněno na GUID.
  • Náhodné (Int32): Inicializuje objekt náhodné třídy pomocí zadané hodnoty zárodku. Pro získání dalšího náhodného čísla ze série voláme metodu Next () třídy Random.
  • Next (): Vrací nezáporné pseudonáhodné celé číslo Int32.
  • Další (Int32): Vrací nezáporné pseudonáhodné celé číslo Int32 menší než zadané celé číslo.
  • Další (Int32, Int32): Vrací nezáporné pseudonáhodné celé číslo Int32 v zadaném rozsahu.

Celá čísla generátoru náhodných čísel v C #

Podívejme se na příklad, jak generovat náhodná celá čísla:

Příklad č. 1

Níže uvedený příklad generuje náhodná čísla Int32.

Kód:

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

Výstup:

Příklad č. 2

Níže uvedený příklad generuje náhodná čísla Int32 v rozsahu 0 až 100.

Kód:

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

Výstup:

Příklad č. 3

Níže uvedený příklad generuje náhodná čísla Int32 v rozsahu 50 až 100.

Kód:

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

Výstup:

Generování čísel s plovoucí desetinnou čárkou

Podívejme se na příklad, jak generovat náhodná čísla s pohyblivou řádovou čárkou:

Příklad č. 1

Níže uvedený příklad generuje náhodná čísla Int32.

Kód:

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

Výstup:

Velmi častá chyba

Nejběžnější chyboví vývojáři, kteří se při generování náhodných čísel zavazují, je to, že pro každé náhodné číslo vytvářejí nový objekt náhodné třídy. Jak je znázorněno v níže uvedeném příkladu:

Příklad č. 1

Kód:

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

Výstup:

Jak jsou náhodná čísla stejná a proč k tomu došlo?

Jak je vysvětleno v práci s náhodnou třídou, generovaná čísla jsou založena na počáteční hodnotě a aktuálním stavu stroje. Jakákoli instance náhodné třídy začíná počáteční hodnotou, uloží aktuální stav a použije ji ke generování dalšího náhodného čísla. Ve výše uvedeném kódu bylo chybou vytvořit novou instanci třídy Random v každé iteraci smyčky. Takže před změnou času ve vnitřních hodinách je kód plně spuštěn a každá instance náhodné třídy je instalována se stejnou počáteční hodnotou. Výsledkem je stejná sada čísel generovaných pokaždé.

Závěr - generátor náhodných čísel v C #

V tomto článku jsme se dozvěděli o generátoru náhodných čísel v C # a o tom, jak interně pracuje při generování náhodných čísel. Také jsme se krátce naučili koncept pseudonáhodných a bezpečně náhodných čísel. Tyto informace jsou dostatečné pro vývojáře, aby ve svých aplikacích použili třídu Random. Hluboký ponor, pokud máte zájem prozkoumat více náhodných čísel pro hesla a jednorázová hesla.

Doporučené články

Toto je průvodce generátorem náhodných čísel v C #. Zde diskutujeme o tom, jak pracuje generátor náhodných čísel, koncept pseudonáhodných a bezpečných náhodných čísel a použití náhodného čísla. Další informace naleznete také v dalších souvisejících článcích -

  1. Matematické funkce v C #
  2. Destruktor v C #
  3. Reverzní číslo v Pythonu
  4. Proměnné v C #
  5. Proměnné v JavaScriptu
  6. Generátor náhodných čísel v Matlabu
  7. Verze Tableau
  8. Generátor náhodných čísel v JavaScriptu
  9. Generátor náhodných čísel v PHP

Kategorie: