Генерация «случайных» чисел из времени? - PullRequest
0 голосов
/ 04 июня 2018

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

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

Например, скажем, в каждом кадре мы можем взять 5 цифр из текущего времени и использовать их для генерации случайных чисел.Скажем, если у нас есть время как число с плавающей точкой ss.mmmuuunnn , где ss = секунды, ммм = милисекунды, uuu = микросекунды и nnn = наносекунды, мы можем взять только часть muuun и использовать ее для генерации наших собственных случайных чисел.Я немного их исследовал, и они кажутся и чувствуют себя довольно случайно.Я могу придумать так много формул, чтобы поиграть с этими 5 цифрами и получить новые числа.

Кто-нибудь здесь видит что-то неправильное или может работать плохо?Напоминаю, я просто ищу простой способ генерирования чисел, которые «ЧУВСТВУЮТ» случайным образом распределены и непредсказуемы.

Это простой и достойный способ дать игрокам чувство случайности?

1 Ответ

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

Допустим, ради аргумента, что вы в среднем делаете один вызов вашей случайной функции каждые 0,1 миллисекунды (поскольку вам нужно, чтобы она была быстрой, вы часто ее вызываете, верно?) И что онаодинаково вероятно попасть куда-либо в этот временной диапазон.Другими словами, предполагается, что часть uun полностью случайна, но все, что выше, изменяется медленно от звонка к звонку и, таким образом, в основном предсказуемо.

Это 1000 возможных результатов или ~ 10биты случайности.Существует 1 056 964 608 нормальных значений с плавающей запятой между 0 и 1 - конечно, они не распределены одинаково.Это на три порядка больше, что звучит для меня как «плохая случайность».Точно так же распространение ваших 10 битов на 32 бита int (независимо от того, насколько вы любите свою функцию) на самом деле не улучшит случайность.

Также обратите внимание, что ни одно из этого не касается возможности (и оченьвероятный сценарий), что ваши вызовы, вероятно, будут чрезвычайно периодическими и / или короткими последовательностями, а также тот факт, что ваша функция системного времени может иметь недостаточно высокое разрешение (или значительно увеличивает энергопотребление системы ),И дальнейшее уменьшение случайности полученного времени, и побочный эффект последнего может быть очень нежелательным.

Напоминание, я просто ищу простой способ генерировать числа, которые "ЧУВСТВУЮТ" случайным образомраспределены и непредсказуемы.

Это крайне неопределенно.Люди ужасны в оценке случайности и, скорее всего, «почувствуют», что распределение, близкое к равномерному, является более случайным, чем истинное, полностью случайное распределение - особенно когда речь идет о полосах.

Непредсказуемость также существует и на путина многих уровнях: от «игрок не может вручную предсказать, что будет делать противник» до «криптографической защиты до конца времени».Например, учитывая вышеизложенные предположения, можно было бы предсказать результат второго из двух случайных вызовов, которые происходят в быстрой последовательности с вероятностью успеха от 0,1% до 100%.Трудно сказать, как эта модель проявляется в игре, но люди очень хорошо умеют определять шаблоны.

...