Может ли drand48 () вернуть 1? - PullRequest
0 голосов
/ 22 ноября 2018

Руководство по drand48() гласит:

Функции drand48 () и erand48 () возвращают неотрицательные значения двойной точности с плавающей запятой, равномерно распределенные по интервалу [0.0, 1.0].

( источник )

Так что просто для пояснения: означает ли это, что 1.0 может быть возвращено drand48()?Или это означает, что возвращаемое значение будет <1,0? </p>

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

Кто-нибудь здесь, ктоможет пролить свет на это?Будет ли результат всегда меньше 1,0 или также может быть равен 1,0?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Вы смотрите на очень старую документацию POSIX.POSIX 2017 для drand48 говорит:

Функции drand48 () и erand48 () должны возвращать неотрицательные значения с плавающей запятой двойной точности, равномерно распределенные поинтервал [0.0,1.0).

Это также согласуется с справочными страницами Linux (которые обычно представляют реализацию glibc).

То же самое появляется в POSIX 2001 тоже.

0 голосов
/ 22 ноября 2018

«за интервал [0.0, 1.0].»Можно с уверенностью предположить математическое обозначение интервала.Концы интервалов в скобках являются исключительными, а концы интервалов в квадратных скобках включаются.Таким образом, в соответствии с обозначениями возвращаемое значение может быть 1.0.

Однако это документация старой версии, а текущие указывают [0.0, 1.0) в качестве интервала (что означает егоне может быть 1.0):

Поэтому я склонен полагать, что [0.0, 1.0) является правильной спецификацией.(может быть, это определение изменилось после SUS2, начиная с 1997 года, или это опечатка на странице, но я не разбираюсь в этом, поэтому не буду взвешивать)


в тесте методом грубой силы drand48 () никогда не возвращает 1.0.Он часто возвращает 0, но никогда не 1,0.

Это кажется очень подозрительным.0.0 должна иметь такую ​​же вероятность появления в интервале, как и любое другое число, поэтому «Часто возвращается 0» выглядит неправильно.Убедитесь, что вы печатаете с полной точностью.

Обратите внимание, что dran48 и друзья устарели

...