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

User Tag List

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

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

  1. #1
    Activist Аватар для Alex/AT
    Регистрация
    14.03.2005
    Адрес
    Russia, Saint-Petersburg
    Сообщений
    213
    Благодарностей: 18
    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 в 15:14.

  2. Эти 7 пользователя(ей) поблагодарили Alex/AT за это полезное сообщение:
    alone (31.03.2014), Destr (31.03.2014), drbars (31.03.2014), Hacker VBI (31.03.2014), Titus (31.03.2014), Urguk (31.03.2014), zebest (31.03.2014)

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

  4. #2
    Master Аватар для zebest
    Регистрация
    11.01.2008
    Адрес
    Ладошкино
    Сообщений
    577
    Благодарностей: 490
    Записей в дневнике
    3
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  5. #3
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,497
    Благодарностей: 668
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    and %00000111
    Формально всё правильно, а по существу - издевательство (В.И.Ленин)

  6. Этот пользователь поблагодарил Andrew771 за это полезное сообщение:
    zebest (01.04.2014)

  7. #4
    Master
    Регистрация
    11.04.2006
    Адрес
    Novosibirsk
    Сообщений
    788
    Благодарностей: 190
    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 в 06:51.

  8. Эти 3 пользователя(ей) поблагодарили ram_scan за это полезное сообщение:
    alone (02.04.2014), introspec (02.04.2014), Titus (02.04.2014)

  9. #5
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    9,937
    Благодарностей: 3436
    Mentioned
    2 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

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

  10. #6
    Master
    Регистрация
    11.04.2006
    Адрес
    Novosibirsk
    Сообщений
    788
    Благодарностей: 190
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    Выкинул.

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

  11. #7
    Master
    Регистрация
    25.03.2013
    Адрес
    г. Лондон, Великобритания
    Сообщений
    948
    Благодарностей: 645
    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" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.

  12. Эти 2 пользователя(ей) поблагодарили introspec за это полезное сообщение:
    alone (02.04.2014), Titus (02.04.2014)

  13. #8
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,363
    Благодарностей: 704
    Mentioned
    1 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.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%] kiwi кошелек +79178162712

  14. Эти 2 пользователя(ей) поблагодарили jerri за это полезное сообщение:
    introspec (02.04.2014), Titus (02.04.2014)

  15. #9
    Banned
    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,122
    Благодарностей: 1075
    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

  16. #10
    Master
    Регистрация
    11.04.2006
    Адрес
    Novosibirsk
    Сообщений
    788
    Благодарностей: 190
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

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

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

Похожие темы

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

Ваши права

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