Вопрос по математике/программированию, который возник, когда я пытался использовать набор случайных данных в качестве источника энтропии. В ситуации, когда я использую что-то вроде предварительно созданных случайных файлов от Random.org в качестве источника энтропии. Необработанные данные, подобные этому, представляют собой случайные нули и единицы и могут быть отбиты как случайные байты (0-255) или более крупные диапазоны как степени двойки. Я пытаюсь максимально эффективно использовать этот случайный источник, поскольку он имеет конечную длину, поэтому я не хочу использовать больший набор, чем мне нужно.
Взятие случайных байтов справедливо, если вы хотите получить число из диапазона, без остатка кратного 256 (например, от 100 до 355, от 0 до 15 и т. д.). Однако что, если я хочу число от 1 до 100? Это не очень хорошо вписывается в 256. Я мог бы назначить 0-199 диапазону 1-100 дважды, оставив 200-255 как лишние, которые нужно было бы отбросить, если бы они выпали, иначе 55 чисел в диапазоне были бы несправедливо взвешены. приходить чаще.
Является ли выбрасывание чисел, выходящих за пределы допустимого диапазона, единственным справедливым вариантом? Или есть математический способ «размыть» эти 55 чисел в диапазоне от 1 до 100?
Единственный другой вариант, который я придумал, чтобы знать, что я смогу использовать число и не выбрасывать результаты, - это поглотить большее количество байтов, чтобы степень смещения была меньше (0-255 будет иметь некоторые числа в 1-100 с двумя «ничьими», а некоторые с тремя; шансы 3: 2 = 50% более вероятны. Десять байтов (0-2550) будут иметь шансы 26:25 = 4% более вероятные и т. д.) Это израсходует больше данных, но более предсказуемо.
Есть ли термин для того, что я пытаюсь сделать (не могу найти в Google то, что не могу назвать)? Возможно ли это, или я должен признать, что мне придется отбрасывать данные, которые не совсем соответствуют тому диапазону, который я хочу?