Методы расширения для генерации случайных чисел двойной дочности в C#

В этом примере добавляются методы расширения класса Random для генерации двойных значений в указанном диапазоне.

Класс Random предоставляет методы для генерации псевдослучайных чисел. Метод Next имеет три перегруженные версии, которые производят неотрицательное целое число, целое число от 0 до некоторой верхней границы и целое число между нижней и верхней границами.

Странно, что метод NextDouble класса Random имеет только одну версию, которая возвращает значение между 0.0 и 1.0. Этот пример добавляет две другие очевидные версии для создания двойных значений между 0.0 и верхней границей и между двумя границами.

Следующий код показывает класс RandomExtensions, который реализует методы расширения.

public static class RandomExtensions
{
   // Возвращает случайное значение от 0 включительно и max.
    public static double NextDouble(this Random rand, double max)
    {
        return rand.NextDouble() * max;
    }

   // Возвращает случайное значение между min inclusive и max exclusive.
    public static double NextDouble(this Random rand,
        double min, double max)
    {
        return min + (rand.NextDouble() * (max - min));
    }
}

Здесь нет больших ухищрений. Первый метод использует исходный метод NextDouble для получения значения между 0.0 и 1.0. Он умножает это на верхнюю границу, чтобы получить значение между 0.0 и верхней границей и возвращает результат.

Второй метод также использует исходный метод NextDouble для получения значения между 0.0 и 1.0. Он умножает это на (max - min) и добавляет это к нижней границе. Поскольку генератор случайных чисел дает значение между 0.0 и 1.0, результат между:

 min + 0.0 * (max - min) = min

и

    min + 1.0 * (max - min) = min + (max - min) = max

Значение находится между min и max по желанию, поэтому метод возвращает его.

Источник: csharphelper.com/blog/2017/07/make-extension-methods-to-generate-random-double-values-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (3 оценок, среднее: 5,00 из 5)
Adblock
detector