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

User Tag List

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 21 по 30 из 49

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

  1. #21
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,561
    Спасибо Благодарностей отдано 
    1,223
    Спасибо Благодарностей получено 
    1,755
    Поблагодарили
    684 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от denpopov Посмотреть сообщение
    А если построить огибающий колокол?
    Алгоритм? Что за сумма величин?

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

    По умолчанию

    Вот очень быстрый генератор ПСЧ на основе LSFR по схеме Галуа:
    Код:
    Galois16:		ld	hl, #FFFF		; 10
    SeedValue:		EQU	$-2
    			add	hl, hl			; 11
    			sbc	a			; 4
    			and	#BD			; 7	instead of #BD, one can use #2D, #39, #3F, #53 or #D7
    			xor	l			; 4
    			ld	l, a			; 4
    			ld	(SeedValue), hl		; 16
    			ret				; 10
    Всего 66 тактов. С любым из перечисленных значений константы обратной связи, этот генератор даёт период в 65535 значений. Внимание: использовать 0 в качестве затравочной константы нельзя.
    "introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.

  3. #23
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,058
    Спасибо Благодарностей отдано 
    220
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от introspec Посмотреть сообщение
    этот генератор даёт период в 65535 значений
    LFSR дает хорошие случайные биты, но вот использовать все биты состояния в качестве 8- или 16-разрядных случайных чисел не рекомендуется: они все-таки довольно сильно коррелируют между соседними раундами работы генератора.

    Любопытно, что несложной модификацией алгоритма можно заставить его "перескакивать" сразу на несколько бит, как будто подпрограмма была вызвана несколько раз. Если перескакивать каждый раз на 8 бит - то 8 из 16 разрядов такого генератора уже гораздо лучше подойдут в качестве 8-битных случайных чисел. Эта технология называется "Leap-ahead LFSR", можно погуглить и сразу найти описание.
    Последний раз редактировалось Barmaley_m; 06.04.2014 в 21:20.

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

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    LFSR дает хорошие случайные биты, но вот использовать все биты состояния в качестве 8- или 16-разрядных случайных чисел не рекомендуется: они все-таки довольно сильно коррелируют между соседними раундами работы генератора.
    Это понятно. Кстати, с учётом скорости работы этого генератора, есть потенциал замесить биты, чтобы получался более-менее приличный "случайный" байт. Вот вариант на 30 тактов:
    Код:
    			add	h			; 4
    			and	%10101010		; 7
    			ld	h, a			; 4
    			ld	a, l			; 4
    			and	%01010101		; 7
    			or	h			; 4
    Пока что генератор Baze мне всё ещё нравится больше, но он работает 136 тактов, т.е. запас есть.
    "introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.

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

    По умолчанию

    Я думаю, что вот это - самый быстрый генератор байтов "индустриального" качества:
    Код:
    rnd     ld  hl,0xA280   ; yw -> zt
            ld  de,0xC0DE   ; xz -> yw
            ld  (rnd+4),hl  ; x = y, z = w
            ld  a,l         ; w = w ^ ( w << 3 )
            add a,a
            add a,a
            add a,a
            xor l
            ld  l,a
            ld  a,d         ; t = x ^ (x << 1)
            add a,a
            xor d
            ld  h,a
            rra             ; t = t ^ (t >> 1) ^ w
            xor h
            xor l
            ld  h,e         ; y = z
            ld  l,a         ; w = t
            ld  (rnd+1),hl
            ret
    Этот генератор был написан Патриком Раком (Patrik Rak) и опубликован на WoS в 2008 году. Процитированный выше код был слегка дооптимизирован Einar Saukas. Он выдаёт новый псевдослучайный байт за 122 тактa процессора.

    Если скорость не критична, я бы рекомендовал использование именно этого генератора; он быстрее многих генераторов в этом треде, не требует большого буфера, а математически - намного, намного совершеннее LSFR.
    Последний раз редактировалось introspec; 07.04.2014 в 15:41. Причина: нашёл слегка более быструю версию
    "introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.

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

    По умолчанию

    Цитата Сообщение от introspec Посмотреть сообщение
    Я думаю, что вот это - самый быстрый генератор байтов "индустриального" качества
    А что за алгоритм в основе?

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    А что за алгоритм в основе?
    Алгоритм называется Xor-Shift, вот ссылка на статью, описывающую идеологию таких генераторов: http://www.jstatsoft.org/v08/i14/paper
    Партику пришлось заново пересчитать константы генератора, т.к. в статье основной упор на тройки 32-х битных слов, а Патрик переделал алгоритм для четвёрки восьмибитных, для удобства реализации на Z80.
    "introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.

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

    По умолчанию

    Цитата Сообщение от introspec Посмотреть сообщение
    Алгоритм называется Xor-Shift, вот ссылка на статью, описывающую идеологию таких генераторов:
    Это классический образец генератора на сдвиговом регистре с обратной связью. Только насколько я понимаю он с 32битным "семечком". Полином считать мне лениво.

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

    По умолчанию

    Цитата Сообщение от ram_scan Посмотреть сообщение
    Это классический образец генератора на сдвиговом регистре с обратной связью. Полином считать мне лениво.
    Да-да, так его, так, научите Джорджа Марсалью писать ГСЧ, научите...
    "introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.

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

    По умолчанию

    Цитата Сообщение от introspec Посмотреть сообщение
    Да-да, так его, так, научите Джорджа Марсалью писать ГСЧ, научите...
    Ну, во первых если я что-либо в чем-либо понимаю то сверьху не M-генератор.

    Во вторых зачем его учить ? Дональд Кнут всех в 50-е годы научил обобщив высшую математику для MIX машины. С той поры собсно ничего нового не придумали пока еще.

    Достаточно открыть книжку и прочитать, не изобретая велосипеда. Я прочитал.

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

Ваши права

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