Важная информация

User Tag List

Страница 1 из 5 12345 ПоследняяПоследняя
Показано с 1 по 10 из 49

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

  1. #1
    Activist Аватар для Alex/AT
    Регистрация
    14.03.2005
    Адрес
    Russia, Saint-Petersburg
    Сообщений
    213
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

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

    Не знаю, может где-то уже что-то подобное пробегало, может кому-то пригодится.

    Быстрый (116T) генератор псевдослучайных чисел на основе LCG с неплохой равномерностью:

    Код:
    Random8
        ; breaks A,HL,DE, returns pseudo-random u8 value in A
        ; consumes 116T including RET
    
        ; ALGO: u16 seed = (seed << 7) - seed + 251
        ; ALGO: result = (u8) (seed + seed >> 8)
    
        LD HL,#55AA     ; 10T, 10T
    .seed EQU $-2       ; initialize Random8+1 (seed) with different u16 values to get different sequences
        LD E,L          ; 4T, 14T
        LD D,H          ; 4T, 18T
        XOR A           ; 4T, 22T
        SRL H           ; 8T, 30T
        RR L            ; 8T, 38T
        RRA             ; 4T, 42T
        LD H,L          ; 4T, 46T
        LD L,A          ; 4T, 50T
        SBC HL,DE       ; 11T, 61T
        LD DE,251       ; 10T, 71T
        ADD HL,DE       ; 11T, 82T
        LD (.seed),HL   ; 16T, 98T
        LD A,L          ; 4T, 102T
        ADD A,H         ; 4T, 106T
        RET             ; 10T, 116T
    Последний раз редактировалось Alex/AT; 31.03.2014 в 16:14.

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

  3. #2
    Veteran Аватар для zebest
    Регистрация
    11.01.2008
    Адрес
    Ладошкино
    Сообщений
    1,668
    Записей в дневнике
    4
    Спасибо Благодарностей отдано 
    318
    Спасибо Благодарностей получено 
    221
    Поблагодарили
    174 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    я так понимаю это генератор от 0 до 255?
    Как его переделать oт 0 до 7 ?
    резальт в аккумуляторе поделить на 32? сдвигом можно сделать?)
    Profi v3.2 -=- Speccy2010,r2

  4. #3
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    130
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    and %00000111

  5. #4
    Master
    Регистрация
    11.04.2006
    Адрес
    Novosibirsk
    Сообщений
    966
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    8
    Поблагодарили
    6 сообщений
    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.

  6. #5
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,550
    Спасибо Благодарностей отдано 
    1,213
    Спасибо Благодарностей получено 
    1,748
    Поблагодарили
    680 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

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

  7. #6
    Master
    Регистрация
    11.04.2006
    Адрес
    Novosibirsk
    Сообщений
    966
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    8
    Поблагодарили
    6 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    Выкинул.

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

  8. #7
    Master
    Регистрация
    25.03.2013
    Адрес
    г. Лондон, Великобритания
    Сообщений
    948
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот генератор из коллекции Baze, он тоже чуть медленнее. Визуально по распределению точек я его не проверял, но скорость у него адекватная и проблем с качеством полученных случайных чисел я с ним не видел.
    Код:
    This generator was taken from an old ZX Spectrum game and slightly optimised.
    
    Input: none
    Output: HL = pseudo-random number, period 65536
    
    Rand16	ld	de,Seed		; Seed is usually 0
    	ld	a,d
    	ld	h,e
    	ld	l,253
    	or	a
    	sbc	hl,de
    	sbc	a,0
    	sbc	hl,de
    	ld	d,0
    	sbc	a,d
    	ld	e,a
    	sbc	hl,de
    	jr	nc,Rand
    	inc	hl
    Rand	ld	(Rand16+1),hl
    	ret
    "introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.

  9. #8
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,746
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    265
    Поблагодарили
    199 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Переписанный генератор из ПЗУ бейсика
    Код:
    random
    	ld	de,0
    seed	equ	$-2
    	xor	a
    	ld	h,a,l,a,b,a
    	add	hl,de
    	adc	a,b
    	add	hl,hl
    	adc	a,a
    	add	hl,hl
    	adc	a,a
    	add	hl,hl
    	adc	a,a
    	add	hl,de
    	adc	a,b
    	add	hl,hl
    	adc	a,a
    	add	hl,hl
    	adc	a,a
    	add	hl,de
    	adc	a,b
    	add	hl,hl
    	adc	a,a
    	add	hl,de
    	adc	a,b
    	sub	#4a
    	neg
    	ld	c,a
    	add	hl,bc
    	ld	(seed),hl
    	ret
    формулу не помню, но генерит идеально
    С уважением,
    Jerri / Red Triangle.

  10. #9
    Banned
    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,123
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    юзал другой, мне хватило..
    Код:
    random:
    R1:LD C,$15+3
    R2:LD A,#70
     ADD A,C:LD C,A
     LD (R1+1),A
    R3:LD A,#FD
     SUB C:LD C,A,(R2+1),A
     RRCA:LD (R3+1),A
     LD A,C

  11. #10
    Master
    Регистрация
    11.04.2006
    Адрес
    Novosibirsk
    Сообщений
    966
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    8
    Поблагодарили
    6 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от introspec Посмотреть сообщение
    Вот генератор из коллекции Baze, он тоже чуть медленнее.
    Проверил его, вельми хороший генератор. Его рекомендовать можно. Правда он как мне кажется чуть тормознее моего варианта, надо такты посчитать.
    Последний раз редактировалось ram_scan; 02.04.2014 в 12:04.

Страница 1 из 5 12345 ПоследняяПоследняя

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

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

Эту тему просматривают: 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

Ваши права

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