User Tag List

Показано с 1 по 10 из 51

Тема: Генератор псевдослучайных чисел

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    11.04.2006
    Адрес
    Novosibirsk
    Сообщений
    971
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    9 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Каноничный генератор. 16-битный. Полином из умной книжки. Длина последовательности 65535. Тактов когда писал не считал, поленился. может статься что он быстрее вышеприведенного. Использовался мною для написания тестрома в части теста ОЗУ.
    Код:
    ;-------------------------------------------------------------------------------       
    ; Генератор псевдослучайных чисел на сдвиговом регистре.
    ; Полином [1,2,4,15] (период 65535)
    ; Входные параметры: HL - SEED
    ; Выходные параметры: HL - новый SEED
    ; Модифицирует: HL, AF, E
    ;------------------------------------------------------------------------------- 
        MACRO RANDOM
        ld          a,h
        rlca                        ; бит 15 положили в бит 0 аккумулятора
        ld          e,l             ; запомнили младшие биты
        add         hl,hl           ; сдвинули регистр на бит влево
        srl         e               ; в бит 0 регистра e положили бит 1 SEED
        xor         e               ; поксорили с 15 битом
        srl         e               ; в бит 0 регистра e положили 2 бит SEED
        xor         e               ; поксорили с результатом
        srl         e               ; пропускаем бит 3
        srl         e               ; в 0 бит вдвигаем 4 бит SEED
        xor         e               ; поксорили с результатом
        and         %00000001       ; выделили младший бит
        xor         l
        ld          l,a
        ENDM
    UPD: проверил первый генератор. Работает отвратительно. Не рекомендую.
    Последний раз редактировалось ram_scan; 02.04.2014 в 07:51.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,377
    Спасибо Благодарностей отдано 
    1,697
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от ram_scan Посмотреть сообщение
    UPD: проверил первый генератор. Работает отвратительно. Не рекомендую.
    Как ты его проверял?

  4. #3

    Регистрация
    11.04.2006
    Адрес
    Novosibirsk
    Сообщений
    971
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    9 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Как ты его проверял?
    Заполнил несколько раз подряд видеопамять (умозрительно он выходил на десяток тактов прытче моего, хотел под свой тест памяти его приладить). Генератор быстро вырождается и на экране устанавливается статичная картинка с характерными вертикальными полосами. Кроме того видно регулярные повторяющиеся паттерны.

    Выкинул.

    Могу приложить скриншоты, если на слово не верите.
    Последний раз редактировалось ram_scan; 02.04.2014 в 08:13.

  5. #4

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,377
    Спасибо Благодарностей отдано 
    1,697
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от ram_scan Посмотреть сообщение
    Заполнил несколько раз подряд видеопамять
    Я тоже так проверяю)))

    Делал когда-то свой генератор случайных чисел на Амиге (для эмулятора Денди, шумового канала), и тоже так на экране его проверял. Менял алгоритм, пока распределение на экране не стало выглядеть случайным. Вот этот амижный код в Сишном эквиваленте:

    Код:
    UINT8 FastRND(void)
    {
    	static UINT16 D2 = 42286,
    				  D1 = 65535,
    				  A1 = 30609,
    				  D3;
    
    		D3 = D1 + A1;
    		A1 = D1 ^ 0xFFFF;
    		D1 = (D2 >> 5) | (D2 << 11);
    		D2 = D2 + D3;
    
    	return D2;
    }

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Расчет модуля разности чисел
    от Andrew771 в разделе Программирование
    Ответов: 15
    Последнее: 15.02.2013, 21:06
  2. Ответов: 16
    Последнее: 15.12.2011, 20:29
  3. Генератор RND
    от Destr в разделе Программирование
    Ответов: 4
    Последнее: 19.10.2009, 21:16
  4. генератор тора
    от voodoogod в разделе Программирование
    Ответов: 1
    Последнее: 10.03.2005, 20:19

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •