рэндом- работа по алгоритму или поиск случайного?

Discussion in 'PHP' started by procedure, 7 Jan 2008.

  1. ElteRUS

    ElteRUS Elder - Старейшина

    Joined:
    11 Oct 2007
    Messages:
    367
    Likes Received:
    460
    Reputations:
    93
    Применений куча. Например в стрелялках, космос, и тебе нужно смоделировать эффект движение звезд ) Что б красиво все было. Вот тогда можешь написать что-то вроде star.x = WINDOW_WIDTH/2+rand()%WINDOW_WIDTH и у каждой звезды будет свое начальное положение. А еще каждому кораблю можно задать свою скорость и тд и тп. ))) Ех, вспомнил книги Андре Ламота по программированию компьютерных игр.. как я тащился от сабжа.. жаль, что забросил. Реально жаль (((
     
    1 person likes this.
  2. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    Генератор случайных чисел можно инициализировать начальным значением части оперативки.Если после выключения ПК она не обнуляется то кез его знает что там лежит.При каждом выключении просто генерить ещё один промежуток от куда брать числа для инициализации.
    вот статья: http://www.xakep.ru/post/40115/default.asp
     
    #22 scrat, 9 Jan 2008
    Last edited: 9 Jan 2008
    2 people like this.
  3. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Ничего случайного в автоматической системе не бывает в принципе, по этому как бы не старались, без считывания данных из внешних датчиков достаточно длинную и достаточно "случайную" ПСП создать невозможно.

    По поводу того, что схемы датчиков и генереторов ПСДП держатся в секрете военными - бред чистой воды. Таких схем полно на паяльнике и подобных ему ресурсах, а так же в соответствующей литературе.

    Есть несколько простейших способов реализовать такой датчик без всяких схем и устройств. Они часто используются в криптографических пакетах типа PGP и всяческих хранилках паролей типа KeePass.

    Первый и самый простой - это считывать значение счетчика комманд процессора при возниконовении какого-либо внешнего события, к примеру - нажатия на кнопку клавиатуры.

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

    Таким образом получаем ПСП нужной длины. Но есть одно но - каждое следующее значение должно быть равновероятным, т.е. количество 0 и 1 в цепочке должно быть равным. Для достижения этого существуют специальные алгоритмы выравнивания вероятностей, которые благодаря своей простоте легко реализуются как программно, так и аппаратно.

    Первый и самый простой - на выходе генератора брать не каждое значение, а результат выполнения операции XOR над двумя идущими подряд значениями. В таком случае возможны 4 результирующих комбинации - 00, 01, 10, 11. Суммарные вероятности пар (01 и 10) и (00 и 11) будут примерно равны, поэтому можно считать, что количество 0 и 1 в результате будет примерно равно.

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

    Единственныйи и самый существенный недостаток этих методов - двухкратное замедление процесса генерации ПСП.
     
  4. VDShark

    VDShark Elder - Старейшина

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Так же можно высчитывать число в зависимости от текущей частоты процессора и его температуры (не обязательно эти характеристики и конкретный узел, есть масса других узлов, которые в подавляющем большинстве случаев присутствуют в ЦВМ). То бишь брать постоянно меняющиеся характеристики каких-либо присутствующих устройств, не подключая ничего дополнительно. Конечно это не сравнится с устройством спец. для этого заточенным, но все же как альтернатива имеет место быть.
     
    2 people like this.
  5. diehard

    diehard Elder - Старейшина

    Joined:
    30 Sep 2007
    Messages:
    442
    Likes Received:
    266
    Reputations:
    15
    Если ты знаешь алгоритм (генерации псевдослуч.числа) и входные данные (текущее время, таблицы, функции и т.д.),
    то сможешь выполнить алгоритм и получить результат (псевдослучайное число)