Случайная функция Java может быть нулем?

Только из любопытства, может Math.random () когда-нибудь быть нулем?

Например, если я должен был иметь:

while (true){
  if (Math.random() == 0)
    return 1;
}

Я когда-либо на самом деле получал бы возврат одного? Существует также погрешность округления для рассмотрения, потому что Math.random () возвращает двойное.

Я спрашиваю, потому что мой преподаватель CS заявил, что случайный () идет от 0 до 1 содержащего, и я всегда думал, что это было эксклюзивно.

16
задан ThirdD3gree 17 June 2010 в 20:53
поделиться

8 ответов

Согласно документации , «Возвращает двойное значение с положительным знаком, большим или равным 0,0 и меньше 1,0». Это означает, что он может быть нулевым.

Как Хэнк написал , исключает верхнюю границу (никогда не может быть 1), так что, возможно, именно отсюда ваша путаница :-).

21
ответ дан 30 November 2019 в 15:04
поделиться

Вполне возможно, что он никогда не вернет точно ноль. Включенный в Java PRNG представляет собой 48-битный LCG, из которого когда-либо используются только 32 бита. Чтобы все 53 бита мантиссы double были равны нулю, вам потребуется хотя бы один вызов next () , где старшие 32 бита равны нулю. и еще один, где их большинство. (Если не ошибаюсь, с генератором такого никогда не случится, но уже поздно, я устал и не буду особо на это ставить.)

Поскольку в документации метода явно указано, как получаются случайные числа, у других реализаций среды выполнения Java также мало возможностей для получения других результатов. В контракте может быть сказано, что число, которое вы получаете, взято из [0, 1). Но на практике существует довольно много значений, которых вы никогда не достигнете (потому что вам нужны два последовательных значения от генератора, который обязательно дает линейную зависимость между последовательными значениями - есть только 48 битов состояния. Вы не можете сгенерировать все разные 53-битные комбинации из этого - по крайней мере, не так, как это сделано.).

Конечно, поскольку Math.random () автоматически запускает статический Random экземпляр, нам также может потребоваться рассмотреть здесь начальное значение, которое может потребоваться чтобы быть очень конкретным для отработки тестового примера. А это может означать, что этот точный момент времени может быть через несколько десятилетий или тысячелетий.

10
ответ дан 30 November 2019 в 15:04
поделиться

Из Java API.

Возвращает двойное значение с положительным знаком, больше или равно 0,0 и меньше 1,0

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Math .html # random ()

Так что да, это возможно.

2
ответ дан 30 November 2019 в 15:04
поделиться

Из http://java.sun.com/javase/6/docs/api/java/lang/Math.html

random () Возвращает двойное значение с положительным знаком, больше или равно 0,0 и меньше 1,0.

Да, это может быть ноль, но не 1. Другими словами, предпочтите документацию по Java своему профессору CS =)

0
ответ дан 30 November 2019 в 15:04
поделиться

Math.random () задокументирован для возврата «двойного значения с положительным знаком, больше или равно 0,0 и меньше 1,0» То есть с 0,0, но без 1,0

1
ответ дан 30 November 2019 в 15:04
поделиться

Теоретически может возвращать нулевое значение.

На практике может потребоваться очень много времени, чтобы получить ровно ноль. Если генератор случайных чисел реализован правильно, он имеет не менее 56 бит внутреннего состояния (в противном случае все биты возвращаемого результата не будут случайными). А это означает, что если распределение значений, полученных с помощью random, является плоским, у вас есть не более одного шанса из 2 ^ 56 вернуть значение, все биты которого равны нулю. Это примерно 10 ^ -19. Я бы не задерживал дыхание.

(Другие справедливо отметили, что, как задокументировано, в теории [и, предположительно, на практике] он не может возвращать значение 1,0).

5
ответ дан 30 November 2019 в 15:04
поделиться

также возможно, в совместимой реализации JRE, что он НИКОГДА не возвращает 0.

1
ответ дан 30 November 2019 в 15:04
поделиться

Включая ноль, исключая единицу, например, [0, 1) или 0 <= x < 1 в зависимости от того, какую нотацию вы предпочитаете.

9
ответ дан 30 November 2019 в 15:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: