2013-02-28 2 views
1

Я привык к генераторам псевдослучайных чисел, которые возвращают значения с плавающей запятой в полуоткрытом интервале [0,1].В каких ситуациях разница между случайными числами, сгенерированными на [0,1) и порожденными на [0,1], имеет значение?

Я видел некоторую ссылку на RNG, которые могут возвращать значения на закрытом интервале [0,1], например. this implementation of the Mersenne Twister.

Я вижу причины, по которым вы хотите исключить одну или обе из конечных точек по математическим причинам, например.

exponentially_distributed=-logf(1.0-rng())

всегда дает действительное число, если 0.0<=rng()<1.0.

Но я не могу представить себе случай, когда замена rng yielding [0,1] на ту, которая дает [0,1], приведет к какой-либо практической разнице.

В каких ситуациях имеетс генератор псевдослучайных чисел с плавающей запятой , который полностью возвращает значения на отрезке [0,1]?

+0

не думаю есть. Тем не менее, это может иметь значение при полах, из-за ограниченной точности типов с плавающей точкой. –

+0

+1 Отличный вопрос. Я также задаюсь вопросом, почему RNG часто находятся на полуоткрытом интервале. Это не похоже на то, что вы можете просто генерировать случайные биты для числа с фиксированной точкой, и как они получают однородность по числу с плавающей запятой? –

+0

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

ответ

2

Возможно, если вы произвольно генерируете вероятность возникновения события? Если вы разрешаете 0, вы должны разрешить 1.

1

Невозможно, выяснить, когда будет закрыт интервал, но открытый промежуток времени является единственным разумным способом использования.

Давайте подбрасывание монеты:

Если вы говорите rnd() < 0.5 является голова, а остальное хвост вы получите больше, чем хвосты голов, если вы используете замкнутый интервал. Сколько еще хвостов зависит от того, насколько вероятным является фактическое получение.

0

Убедительная причина использования полуоткрытого интервала - это вариант использования, где вы выбираете случайный массив для некоторого массива. Когда вы масштабируетесь от [0, 1) до целых чисел в [0, arrayLength], полезно никогда не получать значение arrayLength, поскольку это не индекс в массиве во многих языковых реализациях. Например, Java и ArrayIndexOutOfBoundsException. Полуоткрытый интервал является большим удобством здесь.

Причиной наличия замкнутого интервала [0, 1] является аргумент вероятности Альбина. Но стоит отметить, что математически говоря, вероятность выбора любого конкретного случайного числа, включая 1, в [0, 1], равна нулю. Однако для генераторов псевдослучайных чисел время от времени появляется.

+0

Это целые числа, а не числа с плавающей запятой. ОГРОМНАЯ разница. Указание конечных точек для генерации целых чисел - это просто семантическая разница. Кроме того, вероятность выбора какого-либо конкретного поплавка НЕ ​​0, и, кроме того, она не может быть равномерной по всем возможным поплавкам, если вы хотите равномерное распределение по [0,1]. –

+0

«Для генераторов псевдослучайных чисел время от времени появляется». - Это не следствие того, что он является псевдослучайным, а скорее конечной. В этом диапазоне имеется конечное число поплавков, но бесконечное число действительных чисел. –

Смежные вопросы