Это может быть больше, чем Math, чем С#, но мне нужно решение С#, поэтому я помещаю его здесь.
Мой вопрос о вероятности генераторов случайных чисел, более конкретно, если каждое возможное значение возвращается с равной вероятностью.
Я знаю, что существует метод 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 до 2147483646.
Как можно гарантировать, что каждое число в пределах диапазона имеет равную вероятность возникновения? Скажем, для системы типа лотереи, где для некоторых людей было бы несправедливо иметь более высокую вероятность, чем другие, я не говорю, что использовал бы С#, встроенный в RNG для этого, я просто использовал его в качестве примера.