Случайное число в диапазоне с равной вероятностью

Это может быть больше связано с математикой, чем C#, но мне нужно решение C#, поэтому я помещаю это здесь.

Мой вопрос касается вероятности генераторов случайных чисел, в частности, если каждое возможное значение возвращается с равной вероятностью.

Я знаю, что существует метод Random.Next(int, int ), который возвращает число между первым целым числом и последним (, причем последнее является исключительным).

Random.Next()[без перегрузок] вернет значение от 0 до Int32.MaxValue (, что равно 2147483647)-1, то есть 2147483646.

Если мне нужно значение от 1 до 10, я мог бы вызвать Random.Next(1, 11)для этого, однако имеет ли одинаковая вероятность появления каждого значения от 1 до 10?

Например, диапазон равен 10, поэтому 2147483646 не делится на 10 точно, поэтому вероятность появления значений 1-6 несколько выше, (потому что2147483646 % 10 = 6). Это, конечно, предполагает, что каждое значение в пределах Random.Next()[без перегрузок] возвращает значение от 0 до 2 147 483 646 с равной вероятностью.

Как можно гарантировать, что каждое число в диапазоне имеет равную вероятность появления? Скажем, для системы типа лотереи, где было бы несправедливо, если бы у некоторых людей была более высокая вероятность, чем у других, я не говорю, что буду использовать для этого C#, встроенный в ГСЧ, я просто использовал его в качестве примера..

26
задан Matthew 16 April 2012 в 17:32
поделиться