Генерирование случайного числа для типа ulong - C#
Формулировка задачи:
Мне необходимо сгенерировать случайное число для типа ulong.
Для решения этой задачи напрашивается самый простой вариант.
Необходимо использовать генератор случайный чисел для 2-х переменных int32 (int), чтобы получить int64 (long).
А затем совершить соответствующее преобразование в uint и ulong соответственно на определённом этапе работы алгоритма.
Для решения этой задачи я использую следующую программную реализацию:
При вызове этого метода с приведенными ниже параметрами у меня при выполнении возникает исключение ArgumentOutOfRangeException.
Скажите, как должен выглядеть код этого метода, чтобы не возникало ошибки при его вызове?
Не происходит ли в этом коде "усечение" области допустимых значений для uint в 2-раза, т.к. мы используем генератор для метода (new Random()).Next(), который генерирует числа для диапазона [int.MinValue, int.MaxValue]?
Как можно учесть этот момент в алгоритме?
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;
}RandomULong(ulong.MinValue, ulong.MaxValue)
Решение задачи: «Генерирование случайного числа для типа ulong»
textual
Листинг программы
var r = new Random(); var b = new byte[sizeof (ulong)]; r.NextBytes(b); var res = BitConverter.ToUInt64(b, 0);