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

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

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

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

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

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

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


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

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

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы