Это может быть больше связано с математикой, чем 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#, встроенный в ГСЧ, я просто использовал его в качестве примера..