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

Генератор случайных чисел - это встроенная библиотека в C #, которая генерирует случайные целые числа и числа с плавающей точкой. Каждый раз, когда вызывается соответствующий метод библиотеки, он возвращает случайное число. Серия случайных чисел - это набор чисел, которые не следуют какой-либо схеме. Генератор случайных чисел в C # стремится генерировать такую ​​серию при каждом вызове.

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

  • Итак, как C # генерирует серию случайных чисел? Ответ лежит в Случайном Классе пространства имен Системы C #.
  • Случайный класс - это класс генератора псевдослучайных чисел. Это означает, что этому классу поручено создать серию чисел, которые не следуют ни одному шаблону. Но действительно ли машина способна генерировать случайные числа? Как машина узнает, какое число будет генерироваться дальше? В конце концов, машина разработана, чтобы следовать инструкциям и выполнять алгоритмы.
  • Нет, машина не может генерировать случайные числа самостоятельно. Существует определенный математический алгоритм, основанный на текущих часах и состоянии машины, который помогает ему выбирать числа из набора. Все числа в наборе имеют одинаковую вероятность быть подобранными. Таким образом, они не являются совершенно случайными. Они следуют шаблону. Просто шаблон достаточно случайный, чтобы соответствовать практическим человеческим требованиям.

Псевдо и безопасный

Следующий вопрос, который приходит на ум, - почему они называют его классом генераторов псевдослучайных чисел? Позвольте нам понять это через реальное человеческое поведение. Когда человека просят выбрать случайный цвет, он подбирает определенный цвет. Допустим, он выбрал Желтый. Что заставило его выбрать желтый? Это мог быть его любимый цвет или цвет его окружения, или он мог думать о чем-то желтом в то время. Такое человеческое поведение, которое приводит к выбору чего-то случайным образом, называется Семенем в мире случайности. Семя - это триггер или начальная точка случайности.

Теперь, когда начальное число предсказуемо, случайные числа становятся менее случайными. Затем они называются псевдослучайными числами. Когда они непредсказуемы, они называются безопасными случайными числами.

Случайный класс C # использует текущую временную метку в качестве начального числа, что очень предсказуемо. И, следовательно, термин класс генератора псевдослучайных чисел.

Класс RNGCryptoServiceProvider

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

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

Первое, что нужно для генерации случайного числа в C #, - это инициализация класса Random. Это может быть сделано любым из двух конструкторов класса:

  • Random (): Инициализирует объект класса Random, используя начальное значение времени. Начальное значение - это текущая временная метка машины. Хотя, в более поздних версиях это было изменено, чтобы быть основанным на GUID.
  • Random (Int32): Инициализирует объект класса Random, используя указанное начальное значение. Чтобы получить следующее случайное число из ряда, мы вызываем метод Next () класса Random.
  • Next (): возвращает неотрицательное псевдослучайное целое число Int32.
  • Next (Int32): возвращает неотрицательное псевдослучайное целое число Int32 меньше указанного целого числа.
  • Next (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();
)
)

Выход:

Очень распространенная ошибка

Самая распространенная ошибка, которую допускают разработчики при создании случайных чисел, заключается в том, что для каждого случайного числа создается новый объект случайного класса. Как показано в примере ниже:

Пример № 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 начинается с начального значения, сохраняет текущее состояние и использует его для генерации следующего случайного числа. В приведенном выше коде ошибка заключалась в создании нового экземпляра класса Random в каждой итерации цикла. Таким образом, до того, как время во внутренних часах изменится, код полностью выполняется, и каждый экземпляр класса Random создается с одним и тем же начальным значением. В результате каждый раз генерируется один и тот же набор чисел.

Вывод - генератор случайных чисел в C #

В этой статье мы узнали о генераторе случайных чисел в C # и о том, как он работает для генерации случайных чисел. Мы также кратко изучили концепцию псевдослучайных и безопасных случайных чисел. Этой информации достаточно, чтобы разработчики использовали класс Random в своих приложениях. Глубокое погружение, если интересно узнать больше о случайных числах для паролей и одноразовых паролей.

Рекомендуемые статьи

Это руководство для генератора случайных чисел в C #. Здесь мы обсудим, как работает генератор случайных чисел, концепция псевдослучайных и безопасных случайных чисел и использование случайных чисел. Вы также можете просмотреть другие наши статьи, чтобы узнать больше -

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