User Tag List

Страница 2 из 6 ПерваяПервая 123456 ПоследняяПоследняя
Показано с 11 по 20 из 51

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

  1. #11

    Регистрация
    01.03.2005
    Адрес
    Саранск
    Сообщений
    5,830
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    247
    Поблагодарили
    106 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Программу (сурсы?) для тестов в студию.
    Свирепый агрессивно-депрессивный мордовец!
    Не уверен - не напрягай!

    Не сдавайся. Дыши?

    Virtual TR-DOS

  2. #12

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,377
    Спасибо Благодарностей отдано 
    1,696
    Спасибо Благодарностей получено 
    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;
    }

  3. #13

    Регистрация
    01.03.2005
    Адрес
    Саранск
    Сообщений
    5,830
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    247
    Поблагодарили
    106 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я не уверен, что ram_scan так проверяет. Вот и уточняю.
    Свирепый агрессивно-депрессивный мордовец!
    Не уверен - не напрягай!

    Не сдавайся. Дыши?

    Virtual TR-DOS

  4. #14

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

    По умолчанию

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

    Sent from my HTC Sensation XE with Beats Audio Z715e using Tapatalk
    "introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.

  5. #15

    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    and %00000111
    плохой способ для LCG.

  6. #16

    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    RND-генератор с ОЧЕНЬ большим периодом:

    Код:
            II. Основанный на LFSR
             генератор случайных байт
    
       Как  написано в умных книжках [4], один
    из таких генераторов  придуман Mitchell'ом
    и Moore'ом и имеет вид:
     
    
        X[n] = ( X[n-24] + X[n-55] ) mod m
    
       Если m=2^k, то период такого генератора
    (2^55-1)·2^(k-1), что  для  случая  байтов 
    составит 2^(55-1)·2^7 ў 2^62 ў 4.6·10^18.
    
       Можно  заметить, что  для младшего бита
    такой  генератор  представляет собой LFSR-
    генератор (в данном  случае  N=55, K=24 ).
    Можно было бы вместо сложения использовать
    операцию  XOR, в этом случае мы имели бы 8
    55-битовых  LFSR,  генерирующих  различные
    фазы  последовательности длиной 2^55-1 бит
    и  комбинируемые  в  1 байт. Вместо LFSR с
    параметрами  N=55, K=24 можно использовать
    любой  другой с последовательностью макси─
    мальной длины.
    
      Реализация на Z80 (с таблицей 256 байт):
    
     DO_RND 
          ;OUT: A или B или C - случайный байт
     
    
             LD    H,'PRT_RND ; 256-байтовая
                             ;таблица
     CURND   LD    A,0 
             INC   A
            LD    (CURND+1),A ; не случайный
                            ;номер, а лишь
                           ;указатель в таблице
             LD    L,A
             LD    B,(HL)
             ADD   A,55-24
             LD    L,A
             LD    C,(HL)
             ADD   A,24
             LD    L,A
             LD    A,B
             ADD   A,C
            LD    (HL),A
    ;в регистрах A, B и С находятся случайные 
    ;величины, отстоящие друг от друга на 
     ;несколько десятков отсчётов 
            RET
    
       Перед  использованием такого генератора
    следует  записать хотя бы 1 ненулевой байт
    в таблицу PRT_RND, а чтобы случайные числа
    получались  хорошими  сразу - лучше запол─
    нить таблицу каким-нибудь данными с более-
    менее   равномерным   распределением  всех
    байт.
    http://zxpress.ru/article.php?id=8675

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

  8. #17

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

    По умолчанию

    Цитата Сообщение от introspec Посмотреть сообщение
    Я прикинул сейчас в уме, разница в десяток тактов, не больше. Вообще, нужно будет найти список полиномов и выбрать такой, чтоб попроще кодился...
    Для сдвигового 16-битного регистра с обратной связью такой полином только один, который я и использовал. Можно конечно генератор перекодить, если с неочевидным битовым трюкачеством быстро суметь четность посчитать (под четностью понимается четное/нечетное количество единичных битов в слове). Я литературу проштудировал на этот счет, но мне показалось все-таки в лоб проще сделать, не хватает "аккумуляторов" на Z80 для того чтобы изящно сделать. На писюке четность с битовыми трюками считается быстро и изящно. Но там и классический генератор любой разрядности с делением закодить несложно, либо сопроцессор за вымя потрогать.

    Для 32 бит есть других полиномов, они собсно все в литературе описаны.
    Последний раз редактировалось ram_scan; 02.04.2014 в 18:00.

  9. #18

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

    По умолчанию

    http://www.worldofspectrum.org/forum...ad.php?t=39632
    и там же еще ссылка. У поляков тоже тема есть давно, и с примерами..
    Profi v3.2 -=- Speccy2010,r2

  10. #19

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

    По умолчанию

    Цитата Сообщение от ram_scan Посмотреть сообщение
    Для сдвигового 16-битного регистра с обратной связью такой полином только один, который я и использовал.
    Вот тут лежат коэффициенты всех 2048 возможных линейных сдвиговых генераторов с полным периодом: http://www.ece.cmu.edu/~koopman/lfsr/index.html

    Не все они могут оказаться "хорошими", потому что степень "замешивания" битов не проверяется. Тем не менее, наверняка, в этом списке найдутся достойные альтернативы вашему варианту.
    "introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.

  11. #20

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

    По умолчанию

    А если построить огибающий колокол?

Страница 2 из 6 ПерваяПервая 123456 ПоследняяПоследняя

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

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

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

Ваши права

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