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

Generátor náhodných čísel je vstavaná knižnica v C #, ktorá náhodne generuje celé čísla a čísla s pohyblivou rádovou čiarkou. Zakaždým, keď sa vyvolá príslušná metóda knižnice, vráti náhodné číslo. Séria náhodných čísel je skupina čísel, ktoré sa neriadia žiadnym vzorom. Generátor náhodných čísel v C # má tendenciu generovať takúto sériu vždy, keď je vyvolaná.

Náhodná trieda v C #

  • Ako teda generuje C # sériu náhodných čísel? Odpoveď leží v náhodnej triede priestoru názvov C #.
  • Náhodná trieda je generátor pseudonáhodných čísel. To znamená, že úlohou tejto triedy je generovať sériu čísel, ktoré sa neriadia žiadnym vzorom. Je však stroj skutočne schopný generovať náhodné čísla? Ako by mal stroj vedieť, ktoré číslo vygenerovať ďalej? Nakoniec je stroj navrhnutý tak, aby sa riadil pokynmi a vykonával algoritmy.
  • Nie, stroj nemôže generovať náhodné čísla samostatne. Existuje definovaný matematický algoritmus založený na aktuálnych hodinách a stave stroja, ktorý ho vedie pri výbere čísel zo sady. Všetky čísla v sade majú rovnakú pravdepodobnosť ich vyzdvihnutia. Nie sú teda úplne náhodné. Postupujú podľa vzoru. Je to len tak, že vzor je dostatočne náhodný, aby vyhovoval praktickým ľudským požiadavkám.

Pseudo a bezpečné

Ďalšia otázka, ktorá príde na myseľ, je, prečo ju nazývajú generátor pseudonáhodných čísel? Pochopme to prostredníctvom ľudského správania v reálnom živote. Keď sa od človeka žiada, aby vybral náhodnú farbu, vyzdvihne určitú farbu. Povedzme, že si vybral žltú. Čo ho spôsobilo, že si vybral žltú? Mohla to byť jeho obľúbená farba alebo farba jeho okolia, alebo mohol v tom čase myslieť na niečo žlté. Toto ľudské správanie, ktoré riadi rozhodnutie náhodne vybrať niečo, sa nazýva semeno vo svete náhodnosti. Semeno je spúšťač alebo začiatočný bod náhodnosti.

Teraz, keď je semeno predvídateľné, sú náhodné čísla menej náhodné. Potom sa nazývajú pseudonáhodné čísla. Ak sa nedajú predvídať, nazývajú sa bezpečné čísla.

C # Náhodná trieda používa aktuálnu časovú pečiatku ako zárodok, čo je veľmi predvídateľné. A teda pojem generátor pseudonáhodných čísel.

RNGCryptoServiceProvider Class

Trieda RNGCryptoServiceProvider z menného priestoru System.Security.Cryptography dokáže generovať bezpečné náhodné čísla, ktoré možno použiť ako heslá.

Funkcie generátora náhodných čísel v C #

Prvá vec, ktorá vygeneruje náhodné číslo v C #, je inicializácia náhodnej triedy. Môže to urobiť ktorýkoľvek z dvoch konštruktorov triedy:

  • Random (): Inicializuje objekt triedy Random pomocou časovej hodnoty semien. Počiatočná hodnota je aktuálna časová pečiatka stroja. Aj keď v novších verziách sa toto zmenilo na GUID.
  • Random (Int32): Inicializuje objekt triedy Random pomocou zadanej hodnoty počiatočnej hodnoty. Ak chcete získať ďalšie náhodné číslo zo série, voláme metódu Next () triedy Random.
  • Ďalej (): Vracia nezáporné pseudonáhodné celé číslo Int32.
  • Ďalej (Int32): Vráti nezáporné pseudonáhodné celé číslo Int32 menšie ako zadané celé číslo.
  • Ďalej (Int32, Int32): Vráti nezáporné pseudonáhodné celé číslo Int32 v určenom rozsahu.

Náhodné čísla generátora celých čísel v C #

Pozrime sa na príklad, ako generovať náhodné celé čísla:

Príklad č. 1

Nižšie uvedený prí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ýkon:

Príklad č. 2

Nižšie uvedený prí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ýkon:

Príklad č. 3

Nižšie uvedený prí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ýkon:

Generovanie čísel s pohyblivou rádovou čiarkou

Pozrime sa na príklad, ako generovať náhodné čísla s pohyblivou rádovou čiarkou:

Príklad č. 1

Nižšie uvedený prí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ýkon:

Veľmi častá chyba

Najbežnejšou chybou, ktorú sa vývojári dopúšťajú pri generovaní náhodných čísel, je to, že pre každé náhodné číslo vytvárajú nový objekt triedy Random. Ako je znázornené v nasledujúcom príklade:

Prí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ýkon:

Ako sú náhodné čísla rovnaké a prečo sa to stalo?

Ako je vysvetlené v práci Random Class, generované čísla sú založené na počiatočnej hodnote a aktuálnom stave stroja. Každá inštancia triedy Random začína počiatočnou hodnotou, uloží aktuálny stav a použije ju na vygenerovanie ďalšieho náhodného čísla. Vo vyššie uvedenom kóde bolo chybou vytvoriť novú inštanciu triedy Random v každej iterácii slučky. Takže predtým, ako sa zmení čas vo vnútorných hodinách, je kód úplne vykonaný a každá inštancia náhodnej triedy je vytvorená s rovnakou počiatočnou hodnotou. Výsledkom bude vždy rovnaká množina čísel.

Záver - Generátor náhodných čísel v C #

V tomto článku sme sa dozvedeli o generátore náhodných čísel v C # a o tom, ako interne funguje pri generovaní náhodných čísel. Krátko sme sa naučili aj koncept pseudonáhodných a bezpečných náhodných čísel. Táto informácia je dostatočná pre vývojárov na použitie triedy Random vo svojich aplikáciách. Hlboký ponor, ak máte záujem preskúmať viac náhodných čísel pre heslá a jednorazové heslá.

Odporúčané články

Toto je sprievodca generátorom náhodných čísel v C #. Tu diskutujeme o tom, ako funguje generátor náhodných čísel, koncept pseudonáhodných a bezpečných náhodných čísel a použitie náhodného čísla. Viac informácií nájdete aj v ďalších súvisiacich článkoch -

  1. Matematické funkcie v C #
  2. Destruktor v C #
  3. Reverzné číslo v Pythone
  4. Premenné v C #
  5. Premenné v JavaScripte
  6. Generátor náhodných čísel v Matlabe
  7. Verzia Tableau
  8. Generátor náhodných čísel v JavaScripte
  9. Generátor náhodných čísel v PHP

Kategórie: