Вероятность получения 0.0 от random ()? - PullRequest
1 голос
/ 07 апреля 2020

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

from random import random
a = random()

Я прочитал о случайной функции, и ее распределение - [ 0,0; 1,0). Он использует Mersenne Twister для генерации псевдо случайных чисел, и это плавающее число с точностью до 56 бит.

Я предполагаю, что это означает, что вероятность того, что он сгенерирует ровно 0.0, составляет 1/2 ^ 56?

Что должно быть меньше, чем, чтобы вероятность была 1/2 ^ 28? .. Я пытался понять 56-битное преобразование с плавающей запятой, но я не могу понять это. Каким будет фактическое значение с плавающей запятой?

a = ?
if random() < a:
  print("Success")

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

При непрерывном равномерном распределении по [0, 1) доля выборок, меньших х, равна х. Например, ½ образцов меньше ½. Таким образом, x такой, что вероятность того, что выборка меньше x, составляет 1/2 28 , составляет 1/2 28 .

с квантованным распределением (только кратно некоторого кванта находятся в распределении) над [0, 1), то же самое верно, если x является числом в распределении. Если оно находится между двумя числами в распределении, вероятность того, что выборка меньше x, будет числом, которое больше, чем x. Однако в описанной вами ситуации кажется, что 1/2 28 находится в распределении, и поэтому это ответ.

0 голосов
/ 07 апреля 2020

Зависит от того, как оно было сгенерировано. Почти все библиотеки используют эквидистантный метод для получения значений на [0,1). Вкратце:

  1. Генерирование равномерного целого числа (скажем, 64-битных возвращено за вызов)
  2. Удалите количество лишних битов, чтобы соответствовать точности с плавающей запятой (24 для одного, 53 для удваивается)
  3. Преобразование целого числа в число с плавающей точкой (округление не происходит, поскольку значение «подходит») и масштабирование до диапазона (2 ^ -24 / 2 ^ -53)

Итак (взятие двойных чисел ) метод производит 2 ^ 53 уникальных значений FP, и каждое происходит с вероятностью 2 ^ -53. Количество бит базового целочисленного генератора не влияет на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...