Какво е генератор на случайни числа в C #?

Генератор на случайни числа е вградена библиотека в C #, която генерира случайни числа и числа с плаваща запетая. Всеки път, когато се извика съответният метод на библиотеката, тя връща произволно число. Поредица от случайни числа е набор от числа, които не следват нито един модел. Генераторът на случайни числа в C # има тенденция да генерира такава серия при всяко извикване.

Случайна класа в C #

  • И така, как C # генерира поредица от произволни числа? Отговорът се крие в класа на случаен принцип в пространството на имена на C #.
  • Random class е клас на генератор на псевдослучайни числа. Това означава, че този клас има за задача да генерира поредица от числа, които не следват никакъв модел. Но дали машина наистина е способна да генерира случайни числа? Как машината ще знае кое число да генерира следващо? В крайна сметка машината е проектирана да следва инструкциите и да изпълнява алгоритми.
  • Не, машината не може да генерира произволни числа самостоятелно. Има дефиниран математически алгоритъм, базиран на текущия часовник и състоянието на машината, който го ръководи за избор на числа от набор. Всички числа в комплекта имат еднаква вероятност да бъдат взети. Така те не са напълно случайни. Те следват модел. Просто моделът е достатъчно случаен, за да отговори на практическите човешки изисквания.

Псевдо и сигурно

Следващият въпрос, който идва на ум, е защо го наричат ​​псевдослучайни генератор на числа? Нека да разберем това чрез човешкото поведение в реалния живот. Когато човек бъде помолен да избере произволен цвят, той избира определен цвят. Да речем, че е избрал Жълто. Какво го накара да вземе жълто? Може да е любимият му цвят или цветът на обкръжението му, или можеше да мисли за нещо жълто по онова време. Това човешко поведение, което задвижва решението да изберете нещо на случаен принцип, се нарича семето в света на случайността. Семето е спусъкът или началната точка на случайността.

Сега, когато семето е предвидимо, случайните числа стават по-малко случайни. След това се наричат ​​псевдослучайни числа. Когато са непредсказуеми, те се наричат ​​сигурно-случайни числа.

C # Random Class използва текущата времева марка като семена, което е много предсказуемо. И оттам, терминът клас псевдослучайни генератори на числа.

Клас RNGCryptoServiceProvider

Класът RNGCryptoServiceProvider от System.Security.Cryptography пространство на имена е в състояние да генерира сигурни случайни числа, такива, които могат да бъдат използвани като пароли.

Функции на генератора на случайни числа в C #

Първото нещо за генериране на произволно число в C # е да се инициализира класът Random. Това може да направи всеки от двата конструктора на класа:

  • Random (): Инициализира обект от класа Random, използвайки стойността на семената, базирана на времето. Стойността на семената е текущата времева марка на машината. Въпреки че в по-късни версии това е променено, за да се основава на GUID.
  • Random (Int32): Инициализира обект от класа Random, използвайки зададената стойност на семената. За да получим следващото произволно число от серията, наричаме метода Next () от класа Random.
  • Следващ (): Връща не-отрицателно псевдослучайно цяло число 32.
  • Напред (Int32): Връща не-отрицателно псевдослучайно цяло число3232 по-малко от определеното цяло число.
  • Напред (Int32, Int32): Връща не-отрицателно псевдослучайно цяло число Int32 в зададения диапазон.

Цели генератори на произволни числа в C #

Нека видим пример за генериране на произволни цели числа:

Пример №1

По-долу примерът генерира произволни Int32 числа.

Код:

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

изход:

Пример №2

По-долу примерът генерира произволни Int32 числа в диапазона от 0 до 100.

Код:

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

изход:

Пример №3

Пример по-долу генерира произволни Int32 числа в диапазона от 50 до 100.

Код:

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

изход:

Генериране на числа с плаваща запетая

Нека видим пример как да генерираме произволни числа с плаваща запетая:

Пример №1

Пример по-долу генерира произволни Int32 числа.

Код:

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

изход:

Много честа грешка

Най-често срещаната грешка, която разработчиците допускат, докато генерират произволни числа, е, че за всяко произволно число те създават нов обект от Random Class. Както е показано в примера по-долу:

Пример №1

Код:

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

изход:

Как случайните числа са еднакви и защо се случи това?

Както е обяснено в работата на Random Class, генерираните числа се основават на стойността на семената и текущото състояние на машината. Всеки екземпляр от клас Random започва със началната стойност, записва текущото състояние и го използва за генериране на следващото произволно число. В горния код грешката беше да се създаде нов екземпляр от класа Random при всяка итерация на цикъла. И така, преди времето във вътрешния часовник да се промени, кодът се изпълнява напълно и всеки екземпляр от клас Random се инстанцира със същата стойност на семената. Това води до един и същ набор от числа, генерирани всеки път.

Заключение - Генератор на случайни числа в C #

В тази статия научихме за генератора на произволни числа в C # и как вътрешно работи за генериране на произволни числа. Накратко научихме и концепцията за псевдослучайни и сигурни случайни числа. Тази информация е достатъчна за разработчиците да използват класа Random в своите приложения. Дълбоко гмуркане, ако има интерес да проучи повече за случайни числа за пароли и еднократни пароли.

Препоръчителни статии

Това е ръководство за генератор на случайни числа в C #. Тук обсъждаме как работи генераторът на случайни числа, концепцията за псевдослучайни и сигурни случайни числа и използването на случайно число. Можете също да прегледате и другите ни свързани статии, за да научите повече -

  1. Математически функции в C #
  2. Разрушител в C #
  3. Обратен номер в Python
  4. Променливи в C #
  5. Променливи в JavaScript
  6. Генератор на случайни числа в Matlab
  7. Версии на Tableau
  8. Генератор на случайни числа в JavaScript
  9. Генератор на произволни числа в PHP