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

User Tag List

Страница 5 из 5 ПерваяПервая 12345
Показано с 41 по 49 из 49

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

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

    По умолчанию

    Цитата Сообщение от denpopov Посмотреть сообщение
    собственно нет. мне процедура досталась давным-давно и найдена неизвестно где.
    Но я не утверждаю, что генератор хорош
    Чисто проговорю чтобы можно было понять со стороны: в этом конкретном тесте, найденная незнамо где процедура работает лучше 66т генератора.

    ---------- Post added at 17:49 ---------- Previous post was at 17:37 ----------

    ...но если бы ты замешал биты, как я показывал вот здесь: http://forum.tslabs.info/viewtopic.php?f=3&t=391 , или взял бы не первый, а второй генератор оттуда же, даже без замешивания, то получилось бы по крайней мере не хуже и всё ещё быстрее.
    "introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.

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

    По умолчанию

    кстати, такой вопрос - как получить случайное число из диапазона, например random(60)?

    ничего другого в голову не пришло, как int(rnd()/255*60)

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

    По умолчанию

    можно rnd()%60

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

    По умолчанию

    Цитата Сообщение от denpopov Посмотреть сообщение
    ничего другого в голову не пришло, как int(rnd()/255*60)
    Все правильно. Только зачем делить на 255? Это нужно, только если исходные случайные числа находятся в диапазоне 0..255.

    Остаток от деления и (что равносильно) выделение младших бит не рекомендуется делать в тех книгах, которые я читал о генераторах случайных чисел. Обычно "качество" старших бит в генераторах лучше.

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

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Только зачем делить на 255? Это нужно, только если исходные случайные числа находятся в диапазоне 0..255.
    потому что под rnd() я имел в виду ту функцию, которая выдает случайное число.

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

    По умолчанию

    Цитата Сообщение от denpopov Посмотреть сообщение
    потому что под rnd() я имел в виду ту функцию, которая выдает случайное число.
    Брать остаток от деления, делить нацело, либо пользовать какой-то иной фрагмент от значения ГСЧ верно только в случае когда ГСЧ является именно ГСЧ (и то сильно не всегда).

    Если оперировать цифровым ГПСЧ, то можно наступить на реальные грабли, и тут уже "какой кусочек брать если меня разрядность не устраивает" играет очень заметную роль.

    В большинстве случаев либо делят нацело и берут остаток от деления, либо просто делят нацело (применительно к z80 исключительно дорогая в плане машинного времени процедура если не по степени двойки). Если разрядность позволяет - маскируют. Но тут нужно читать классиков, потому-что бездумное применение конкретных метод для конкретных генераторов ПСЧ может дать откровенно плохой выхлоп.

    Хотя опять-же, смотря для чего это надо. В принципе для игрушки чтобы врагов рожать достаточно наверное любого из генераторов которые были в теме опубликованы (ну кроме пары откровенно плохих, что собственно сами авторы публикуя их и признавали).

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

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

    По умолчанию

    Цитата Сообщение от ram_scan Посмотреть сообщение
    "какой кусочек брать если меня разрядность не устраивает
    честно говоря, для меня это темный лес.
    просто возникла такая необходимость в вычислении случайных чисел из диапазона.

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

    По умолчанию

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

    Но качество результата очень сильно зависит от того как устроен генератор ПСЧ.

    Никто не говорит что так нельзя делать. Так иногда нельзя делать. Если вас результат устраивает (вряд-ли вы пишете криптостойкую софтину, да и генераторы тут опубликованные не для таковой) то пользуйтесь на здоровье и не грейте себе голову =) Перфекционизм - не всегда хорошо.

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

    По умолчанию

    еще из раскопок, слишком много на винте скачанного файла. Субботник!
    Код:
    ; Fast RND
    ;
    ; An 8-bit pseudo-random number generator,
    ; using a similar method to the Spectrum ROM,
    ; - without the overhead of the Spectrum ROM.
    ;
    ; R = random number seed
    ; an integer in the range [1, 256]
    ;
    ; R -> (33*R) mod 257
    ;
    ; S = R - 1
    ; an 8-bit unsigned integer
    
     ld a, (seed)
     ld b, a 
    
     rrca ; multiply by 32
     rrca
     rrca
     xor 0x1f
    
     add a, b
     sbc a, 255 ; carry
    
     ld (seed), a
     ret

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

Ваши права

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