Генерирование случайного числа для типа ulong - C#

Узнай цену своей работы

Формулировка задачи:

Мне необходимо сгенерировать случайное число для типа ulong. Для решения этой задачи напрашивается самый простой вариант. Необходимо использовать генератор случайный чисел для 2-х переменных int32 (int), чтобы получить int64 (long). А затем совершить соответствующее преобразование в uint и ulong соответственно на определённом этапе работы алгоритма. Для решения этой задачи я использую следующую программную реализацию:
public static ulong RandomULong(ulong min, ulong max)
{
    var hight = (new Random()).Next((int)(min >> 32), (int)(max >> 32));
    var minLow = Math.Min((int)min, (int)max);
    var maxLow = Math.Max((int)min, (int)max);
    var low = (uint)(new Random().Next(minLow, maxLow));
    ulong result = (ulong)hight;
    result <<= 32;
    result |= (ulong)low;
    return result;
}
При вызове этого метода с приведенными ниже параметрами у меня при выполнении возникает исключение ArgumentOutOfRangeException.
RandomULong(ulong.MinValue, ulong.MaxValue)
Скажите, как должен выглядеть код этого метода, чтобы не возникало ошибки при его вызове? Не происходит ли в этом коде "усечение" области допустимых значений для uint в 2-раза, т.к. мы используем генератор для метода (new Random()).Next(), который генерирует числа для диапазона [int.MinValue, int.MaxValue]? Как можно учесть этот момент в алгоритме?

Решение задачи: «Генерирование случайного числа для типа ulong»

textual
Листинг программы
            var r = new Random();
            var b = new byte[sizeof (ulong)];
            r.NextBytes(b);
            var res = BitConverter.ToUInt64(b, 0);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы