Почему первое случайное число всегда является тем же на некоторых платформах в lua?

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

define('SITE_TITLE', 'My Website');

Затем используйте эту константу в вашем PHP-файле, чтобы при рендеринге вы могли добавить заголовок сайта в мета-тег описания, [ 113]

<meta name=\"description\" content=\""<?= SITE_TITLE ?>" - Helping create a better description\"/>

5
задан Wookai 20 January 2009 в 17:27
поделиться

5 ответов

Случайный Lua раньше использовал C rand(3) и srand(3) функции (см. здесь). ОБНОВЛЕНИЕ: более новые версии Lua используют случайный (3) где это возможно.

И стандарт C90 и POSIX предлагают межплатформенную реализацию rand и srand это не является лучшим. Это особенно испытывает недостаток в случайности в более низких битах.

Некоторые платформы как Linux отъехали стандартной рекомендации лучшей реализации (например, случайный (3)).

OS/X остается верным для классика rand реализация и Lua наследовали его.

4
ответ дан 18 December 2019 в 14:52
поделиться
8
ответ дан 18 December 2019 в 14:52
поделиться

Как другие отметили, Lua намеренно использует случайный генератор C90 для пользы мобильности - и C90 RNG не очень хорош.

При необходимости в хороших случайных числах используйте некоторый модуль Lua для получения его. Например, вот является вихрь Мерсенна привязкой RNG одним из авторов Lua.

1
ответ дан 18 December 2019 в 14:52
поделиться

Это обычно - плохая идея назвать srand многократно с семенами, которые численно близки (и особенно плохо сделать так с временными стоимостями). Во многих случаях различие первого случайного числа подобно различию семян. При контакте с языком сценариев, который должен преобразовать представления числа, это может быть еще больше.

То же самое происходит при изменении значения семени большей суммой?

2
ответ дан 18 December 2019 в 14:52
поделиться

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

Править: Я предполагаю, что должен уточнить свой ответ. Если Вы не получаете случайную строку чисел, когда отбор с os.time (), Вы не можете получать то, что Вы ожидаете от того вызова функции. Каковы значения, которые Вы возвращаете от os.time ()?

Редактирование № 2: Кроме того, каков вывод из того блока кода?

-2
ответ дан 18 December 2019 в 14:52
поделиться
Другие вопросы по тегам:

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