Что такое drand48 () семя по умолчанию в C? - PullRequest
0 голосов
/ 12 июня 2018

Я хотел бы знать, каково начальное значение по умолчанию для drand48(), т.е. если я не буду явно использовать srand48() перед вызовом drand48()?

Я проверил исходный код glibc 2.23 (версия, которую я сейчас использую), и я думаю, что она равна нулю, но если кто-то сможет это проверить, это было бы неплохо.

1 Ответ

0 голосов
/ 12 июня 2018

В POSIX нет конкретного значения, и наоборот, он говорит, что должна быть вызвана одна из функций инициализации:

Функции srand48(), seed48() и lcong48()являются точками входа инициализации, одна из которых должна быть вызвана перед вызовом либо drand48(), lrand48(), либо mrand48().(Хотя это и не рекомендуется, постоянные значения инициализатора по умолчанию должны предоставляться автоматически, если drand48(), lrand48() или mrand48() вызывается без предварительного вызова точки входа инициализации.)

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

Если вы не вызываете ни одну из этих функций инициализации, вы идете с фразой в скобках.В основном это говорит о том, что внутренние состояния должны быть инициализированы значениями по умолчанию.Это не эквивалентно вызову srand48 с конкретным параметром, поскольку эта функция устанавливает биты младшего разряда в фиксированное значение 0x330.Это может быть эквивалентно вызову seed48(0, 0, 0), но это не совсем понятно.Термин постоянные значения по умолчанию инициализатора может означать, что каждая реализация предоставляет свои значения по умолчанию или что должны использоваться инициализаторы по умолчанию в С (все биты 0).

...