Случайное число на большом расстоянии, это так? - PullRequest
41 голосов
/ 11 июля 2011

Может кто-нибудь проверить этот метод.Мне нужно длинное число типа в диапазоне двух длинных.Я использую функцию .NET Random.Next (min, max), которая возвращает int.Верны ли мои рассуждения, если я просто разделю длинное на 2, сгенерирую случайное число и, наконец, умножу его на 2?Или я слишком полон энтузиазма ... Я понимаю, что мое случайное разрешение уменьшится, но есть ли другие ошибки, которые не приведут к такому случайному числу.

Ответы [ 13 ]

0 голосов
/ 09 февраля 2016

Мое отработанное решение. Проверено на 1000+ раз:

public static long RandomLong(long min, long max)
{
   return min + (long)RandomULong(0, (ulong)Math.Abs(max - min));
}
public static ulong RandomULong(ulong min, ulong max)
{
   var hight = Rand.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)Rand.Next(minLow, maxLow);
   ulong result = (ulong)hight;
   result <<= 32;
   result |= (ulong)low;
   return result;
}
0 голосов
/ 29 июня 2013

Что-то не так с использованием этого простого подхода?

        long min = 10000000000001;
        long max = 99999999999999;
        Random random = new Random();
        long randomNumber = min + random.Next() % (max - min);

d

0 голосов
/ 11 июля 2011

Вам лучше взять разницу между минимумом и максимумом (если она соответствует целому числу), получить случайное число от 0 до этого и добавить его к минимуму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...