User Tag List

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

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

  1. #1

    Регистрация
    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

    Регистрация
    11.01.2008
    Адрес
    Ладошкино
    Сообщений
    1,811
    Записей в дневнике
    4
    Спасибо Благодарностей отдано 
    385
    Спасибо Благодарностей получено 
    339
    Поблагодарили
    244 сообщений
    Mentioned
    14 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  4. #3

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    and %00000111

  5. #4

    Регистрация
    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.

  6. #5

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

    По умолчанию

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

  7. #6

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

    По умолчанию

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

    Выкинул.

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

  8. #7

    Регистрация
    25.03.2013
    Адрес
    г. Лондон, Великобритания
    Сообщений
    948
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    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

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    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

    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,123
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    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

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

    По умолчанию

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

Страница 1 из 6 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

Ваши права

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