Pull to refresh
0
0
Александр Романов @x0rHamster

C# бэкенд-/фулстек-разработчик

Send message
Т.е. если ГПСЧ скормить в качестве входных данных некие постоянно меняющиеся данные (неважно, будь это уровень шума или timestamp — изменятся только качественные характеристики получаемого результата), то этот комплекс (ГПСЧ + внешние данные) станет называться ГСЧ?

P.S. Я вспомнил, к чему и о чем был тот первый комментарий (корень этой ветки). Он касался только «истинно случайных чисел» и физических явлений, на основе которых эти ИСЧ получаются. В принципе, это касается только физики (а не математики — своей «теорией вероятности» я ввел всех в заблуждение). Тут было несколько подветок комментариев, которые затронули случайные процессы в квантовой механике — в частности, я высказал теорию и про это, что на самом деле все закономерно, а случайности появляются из-за того, что мы эти закономерности не знаем. Что-то как-то я эту теорию (ни в коем случае не указание «как есть на самом деле», а всего лишь догадки) потянул не в ту сторону.
Мои знания весьма поверхностны, не спорю. Я и пытаюсь определить, каким же конкретно образом можно сказать, что этот алгоритм (устройство) — ГСЧ, а этот — всего лишь ГПСЧ. Может быть, я чего-то не увидел, но я пока заметил только одно конкретное различие в комментарии выше. Надеюсь, что вы, как специалист, поможете разобраться в этом вопросе. Судя по вашим постам, вы не похожи на «умников» с автобусной остановки, которые на вопрос «а этот автобус меня довезет до МКАДа?» ржут и отвечают «да пошел ты в лес — во ущербный человек, даже карты Москвы наизусть не помнит!».
Хм. Если мы каким-то невероятным образом восстановим состояние окружающей среды у аппаратного ГСЧ, использующего в качестве энтропии внешний источник, то мы получим тот же ГПСЧ. Следовательно, все ГСЧ — те же ГПСЧ, просто восстановить начальные условия мы не можем.
Мы знаем варианты и теории. Вот когда докажем, тогда и будем знать наверняка, и вот тогда хаоса (магии, НЕХ и прочей нечисти) будет меньше, а мы сможем влиять на мир бОльшим образом. До следующего несоответствия с реальностью (^_^)
Мы в любом случае используем и эксперимент, и рассуждение — с помощью первого мы получаем более-менее объективные данные о реальности, а с помощью второго их анализируем, систематизируем и синтезируем новые знания. В конце концов, решение о том, насколько сильная погрешность эксперимента все-таки позволит нам считать, что оно соответствует модели, выносится уже в процессе рассуждения (т.к. у нас еще нет объективных данных о погрешностях, чтобы сравнить с ними — мы их и пытаемся получить, чтобы впоследствии работать с ними и улучшать).
Я так понял, что люди сделали следующим образом: взяли некоторую фигню, назвали ее случайностью, приписали ей с помощью аксиом (а потом уже теорем и прочего) свойства, характеристики и прочая, и теперь применяют это понятие на практике. Безусловно, в таком случае «случайность» существует, ибо есть статистические данные, удовлетворяющие всяким распределениям etc. И оно даже имеет смысл, ибо с помощью этого можно описывать системы, о которых мы не знаем, и, в принципе, работать с ними (получать какой-либо результат). Однако я говорю не про частную случайность (инструмент математики), а про абсолютную (всемирный хаос), некоторый объект, который ничему не подчиняется.

Мдя, походу мы начинаем говорить о разных вещах, вот я и путаюсь (-_-)
Нет, я по большей части все-таки точных наук ремесленник, хотя подобные измышления мне не чужды. Программист я, но одно время занимавшийся теорией архитектуры программного обеспечения (громко сказано — на самом деле искал точку, после которой стоит остановиться дробить и абстрагироваться, а также способы определения границ расширяемости «надо учесть, а то вдруг»).

«Устоявшихся наук». Устояться-то они устоялись, но вот если копать глубже (чем сейчас народ и занимается), то есть шанс, что все эти устои потеряют ценность как дающие безумную погрешность. Шанс, правда, маленький — с гораздо большей вероятностью все останется на своих местах, как физика Ньютона, но с оговорками. Так что и физики ищут парадоксы «и прочую глубинную ерунду» ради того, чтобы понять наконец-то, а чегой-то оно двигается.

«Особой практической пользы не имеет». Я с вами согласен на 99,9(9)%. Тот бесконечно маленький процент состоит из тех людей, которые однажды, понадеявшись на ГСЧ на основе физических величин вроде уровня шума, уронят челюсти, когда увидят, что этот алгоритм был взломан (а, по сути, взломали природу). Сейчас это больше из области фантастики, чем реальности, но кто знает, до чего додумаются физики… А так это действительно всего лишь мое ИМХО, не претендующее на то, чтобы приносить пользу.

Впрочем, я рад, что у нас есть возможность в процессе подобных дискуссий систематизировать все наши «разнообразные знания» и продвинуться дальше (^_^) Глядишь, сейчас чего-нибудь да изобретем…
Я про это и говорил. Наш объем знаний представляет собой некоторое облако, края которого размыты, и что за ними находится, неизвестно. Мы не знаем ни абсолютного состава вещества (наименьшей частицы, как минимум — БАК не зря построили, и физики ломают головы не от нечего делать, а потому что просто так закономерность не выявишь даже с учетом всех текущих познаний), ни каким образом появилась Вселенная (да хотя бы что за границами, до которых не дотягиваются наши высокотехнологичные телескопы и тому подобная техника), ни других подобных далеких/глубоких областей. На текущий день наши знания не конечны, мир изучен не полностью, а значит, что сказать «оно работает именно так и никак иначе» мы можем далеко не про все его объекты — только лишь «скорее всего, оно будет так и так, но может и вот так». А это и есть вероятность (хаос, в какой-то мере), возникшая из-за «недоизученности» системы.
Я имел в виду классификацию на основе объективных показателей, например, тех, что Ocelot привел в комментарии выше.

Если немного переврать ваши слова, то получается, что названия «генератор случайных чисел» и «генератор псевдослучайных чисел» взяты с потолка, и на самом деле они называются «генератор случайных чисел, который можно использовать в криптоалгоритмах» и «генератор случайных чисел, который использовать в криптоалгоритмах опасно». Я же предлагаю добавить конкретности, например, ГСЧ, который можно использовать в криптоалгоритмах с 99% уверенностью в том, что его не взломают, должен обладать такими-то характеристиками, а ГСЧ, который дает более-менее недетерменированные числа, но его можно использовать только для генерации shuffle-плейлистов, должен обладать такими-то характеристиками. При этом, если вам угодно, второй ГСЧ можно переобозвать как «ГПСЧ».

Насчет «если она вообще нужна». Можно потратить кучу времени и денег и в конце концов создать толстую-толстую спецификацию всевозможных ГСЧ, объединенных по классам в зависимости от их характеристик, но окупится ли она? Будут ли ей пользоваться другие, или это будет «классификация ради классификации»? В конце концов, люди до сих пор пользуются понятиями «много» и «мало», несмотря на то, что уже давно придуманы числа, понятия «больше»/«меньше» etc.
ИМХО, случайность — весьма относительное понятие. Я, конечно, не знаток теории вероятности (как, впрочем, и более близких к теме дисциплин, которые, к сожалению, я назвать сейчас не смогу), но я считаю, что абсолютного хаоса (т.е. чего-то, что не подчиняется никаким законам вообще) не существует — есть только плохо изученные системы. А посему терминологическое разделение генераторов чисел на «случайные» и «псевдослучайные» весьма надуманно, ибо «настоящих» случайных чисел не существует. Даже если вас попросить назвать любое число, то оно, каким бы случайным не казалось на первый взгляд, все равно будет зависеть от вашего прошлого опыта и вашего текущего состояния (а может, и еще от чего-то), но вот обнаружить все эти закономерности и попробовать предугадать ваше случайное число может оказаться чересчур сложной задачей. Впрочем, у генераторов случайных чисел есть и более объективные оценки, только вот классификацию осталось придумать (если она вообще нужна).

P.S. Проще говоря, ГСЧ отличается от ГПСЧ точно так же, как «много» отличается от «мало» — разница более-менее понятна, но вот четких границ нет и никогда не было, и на самом деле эти понятия не абсолютные, а связанные с какими-то прошлыми событиями и впечатлениями (например, вы увидели 100500 человек на площади, вас так или иначе впечатлила эта толпа, и теперь все, что хотя бы приблизительно похоже на эту толпу, является «много»; то же самое и с приставкой «псевдо» — последовательность символов «12345» для вас естественно неслучайна (притом, что следующим символом может быть как «6», так и «9», и "%"), а последовательность «19735» случайна до тех пор, пока вы не взглянете на блок цифровых клавиш).
Кхм. Только что не получалось, а как оставил комментарий — вышло скачать без авторизации. Странно…
Вы были залогинены на rutracker.org, а на странице кеша ссылки прямые (на dl.rutracker.org). Я использовал аккаунт на работе, и поэтому дома авторизация слетела, а чтобы авторизироваться, нужен форум, который лежит…
Drag-n-drop по крайней мере в WinRAR и 7-Zip распаковывает во временную папку, а затем перемещает туда, куда перенесли — не всегда удобно, да и медленней, особенно если временная папка и место назначения на разных дисках. Еще один фичреквест для архиваторов (^_^)
Я хотел передать общий смысл моей ошибки и причин моего непонимания (^_^)' Естественно, что чем больше требований (точнейшая синхронизация, многопоточность, мультиплеер, да хоть банально replay-movie), тем больше нюансов и тем сложнее алгоритмы.
Одно время уже обсуждали на Хабре события и событийный подход к программированию (кажется, для экономии энергии (читайте — аккумулятора)). Лично я сделал для себя такой вывод: пока не появится удобного (в плане строк кода, подключаемых библиотек, кроссплатформенности и тому подобных шняг) API для аппаратной поддержки событий (прерывания-то есть, но многим работать с ними не очень удобно, да и абстракции вроде API для универсального доступа к устройствам накладывают свои ограничения), события и их обработка в итоге сведутся к тому же бесконечному циклу.
Ъ. Пока писал самый первый комментарий «где же отличие?», до меня дошло, но я случайно нажал на Alt-Home, и простыня комментария с объяснением стерлась (>_<)

Отличие оказалось в том, как алгоритм будет реагировать на задержку. В моем случае — никак (^_^) В случае алгоритма из статьи оный при выявлении задержки будет обновлять мир столько раз, на сколько этот мир «опаздывает».

Моя ошибка была в том, что я сделал неверные выводы. Да, update_game() не будет выполняться каждую 1/25 секунды. Обновление может вызываться себе приблизительно с таким интервалом, а потом display_game() напорется на сложную сцену, отрисовка которой займет 1/20 секунды, и следующий update_game() будет вызван уже через 1/5 секунды (5/25 — три интервала, короче), но благодаря такому построению игрового цикла, как в статье, он будет вызван не один, а пять раз, чтобы компенсировать задержку (таким образом, в это время между вызовами update_game() будет проходить 1-2 мс). НО. В среднем (по больнице, есессено, и тем больше по больнице, чем круче скачки FPS) update_game() будет вызываться именно 25 раз в секунду (неважно, с какими промежутками между вызовами), а значит, что можно считать, что между вызовами update_game() в среднем проходит 1/25 секунды.

И, наконец, описание своими словами алгоритма из статьи:

бесконечный цикл {
    если (время между вызовами update_game() больше 1/25 секунды) {
        [время_между_вызовами_update_game_в_секундах / (1/25)] раз сделать { update_game(); }
    }
    display_game();
}

Есессено, что значение времи между вызовами с учетом единиц измерения (секунд) будет дробным, а значит, что после деления на 1/25 (умножения на 25) нужно взять целое число, но это уже нюансы (равно как и переменные, точки отсчета etc).
> Фактически мы можем принять как данность, что даже на слабом железе функция update_game() вызывается 25 раз в секунду. Поэтому наша игра будет обрабатывать пользовательский ввод и обновление состояние без особых проблем даже в случае, когда отрисовка выполняется на частоту 15 кадров в секунду.

Если говорить простыми словами, то я вижу алгоритм таким:

бесконечный цикл {
    если (update_game() выполняется не чаще 25 раз в секунду) {
        update_game();
    }
    display_game();
}

Ну не могу я представить ситуацию, когда при последовательном вызове функций одна будет выполняться чаще, чем другая, при том, что ее запуск «прореживают». В статье ведь не говорится о многопоточности etc. Что я недопонял?
Насчет нетбуков не очень понятно, чем неудобно SWF-решение, ведь Windows — он и в Африке Windows, и флешовый плагин можно поставить точно так же, как и на десктоп. Что касается мобильных устройств, то да, но с одной оговоркой — на мобильных телефонах и прочих малофункциональных/неудобных девайсах вряд ли будут грузить файлы. Однако тут встает такой вопрос — а насколько хорошо поддерживают те же мобильные устройства, с которых будут загружаться файлы (если честно, вообще-то я плохо представляю серьезную работу на планшетнике с последующей загрузкой файлов на сайт, но, в принципе, такое возможно — видел, как девушка в метро на планшете коллаж из фоток делала), JS/Ajax (и заодно SWF и HTML5)?
P.S. Дабы избежать недоразумений — все файлы, в которых объявлены автозагрузчики, нужно подключать вручную (через require_once, например) — положить их рядом с файлами классов недостаточно. Я, конечно, понимаю, что тут люди знающие, но на всякий пожарный лучше все-таки предотвратить безуспешные попытки сотворить магию (^_^) Новички ведь тоже сюда ходят, так же, как и мы когда-то, учатся и так же делают глупые (для нас, но не для них) ошибки.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity