реклама на сайте
подробности

 
 
> Псевдослучайный генератор чисел, Нужен несложный алгоритм
Juras Pr.
сообщение Nov 22 2008, 18:05
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 26-04-08
Из: BY/MN
Пользователь №: 37 111



Подскажите несложный алгоритм, генерирующий значения от 0 до 31 по псевдослучайному закону. Сверхравномерность распределения значений мне не нужна, а нужно, чтобы было хоть подобие случайности. Работаю в основном на ассемблере.

Сообщение отредактировал Juras Pr. - Nov 22 2008, 18:06
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Juras Pr.
сообщение Nov 22 2008, 21:00
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 26-04-08
Из: BY/MN
Пользователь №: 37 111



Я попробовал сдвигать влево один байт, перед сдвигом беру 3-й и 6-й биты (с другими битами получается хуже), применяю к ним XOR и результат заношу после сдвига в 0-й бит байта. А в результат беру 5 младших битов. Перед запуском в этот регистр (байт) было занесено значение $55.
После прогона алгоритма 3 раза (по 32 каждый) получилась такая диграмма распределения.
Прикрепленное изображение

При увеличении числа прогонов диаграмма почти выравнивается.
Да, пользователь будет иногда нажимать кнопку, а таймер работает с высокой частотой, поэтому его я попробую задействовать. Этот алгоритм я буду писать на ассемблере.

Сообщение отредактировал Juras Pr. - Nov 22 2008, 21:03
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Nov 23 2008, 00:20
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Когда-то экспериментировал, только проверьте: длинну регистра нужно брать m = 2^n - 1, один бит крайний, второй может быть перед ним, либо самый первый, длиннна последовательности 2^m - 1, регистр инициализировать любым числом, отличным от нуля. Имхо, точно работает для 7, 15, 31 бит.

Сообщение отредактировал Огурцов - Nov 23 2008, 00:22
Go to the top of the page
 
+Quote Post
SKov
сообщение Nov 23 2008, 12:05
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119



Цитата(Огурцов @ Nov 23 2008, 03:20) *
только проверьте: длинну регистра нужно брать m = 2^n - 1

Это, конечно, преувеличение.
Длину регистра можно брать любую. Для каждой длины m можно найти примитивный элемент поля GF(2^m), который даст на выходе регистра последовательность максимальной длины. В том числе можно подобрать и такой прим. элемент, который потребует только один сумматор в обратной связи. Кстати, этот вариант хоть и прост в реализации, но дает не очень хороший датчик. Чем больше сумматоров, тем датчик "псевдослучайнее".
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Nov 23 2008, 13:22
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(SKov @ Nov 23 2008, 12:05) *
Длину регистра можно брать любую.

Конечно, при условии, что есть возможность физически проверить всю последовательность.

Цитата(SKov @ Nov 23 2008, 12:05) *
В том числе можно подобрать и такой прим. элемент, который потребует только один сумматор в обратной связи.

Да, я на это и намекал.
Go to the top of the page
 
+Quote Post
SKov
сообщение Nov 23 2008, 18:58
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119



Цитата(Огурцов @ Nov 23 2008, 16:22) *
Конечно, при условии, что есть возможность физически проверить всю последовательность.

Никто физически ничего не проверяет. Есть такая наука, называется теория конечных полей. Она занимается теоремами и доказательствами и не использует "физических" проверок wink.gif
Есть таблицы примитивных элементов, которые уже "проверили". Если не ошибаюсь,
в книжке Лиддла и Нидеррайтера есть таблицы, которые можно использовать для создания регистров сдвига длиной до 160, которые будут гарантированно генерировать последовательность бит с периодом 2^160. Если будет свободное время, попробуйте проверить этот период "физически." smile.gif
Кажется, это число сильно больше, чем число атомов в видимой части Вселенной smile.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Juras Pr.   Псевдослучайный генератор чисел   Nov 22 2008, 18:05
- - 777777   Цитата(Juras Pr. @ Nov 22 2008, 21:05) По...   Nov 22 2008, 18:45
- - Juras Pr.   Спасибо, уже что-то есть. Идея понятна. А что если...   Nov 22 2008, 18:54
|- - 777777   Цитата(Juras Pr. @ Nov 22 2008, 21:54) Сп...   Nov 22 2008, 19:11
- - Tiny   Я делал так: В таймере, который выполняет свою фун...   Nov 22 2008, 19:08
- - domowoj   Можно сделать програмный сдвиговый регистр с обрат...   Nov 22 2008, 19:13
- - Juras Pr.   Ближе всего мне 7-и битный вариант получается, буд...   Nov 23 2008, 00:27
- - ae_   Цитата(Juras Pr. @ Nov 23 2008, 08:27) .....   Nov 23 2008, 13:30
|- - 777777   Цитата(ae_ @ Nov 23 2008, 16:30) Двух под...   Nov 23 2008, 13:43
||- - Огурцов   Цитата(777777 @ Nov 23 2008, 13:43) В слу...   Nov 23 2008, 16:31
||- - Petka   Цитата(Огурцов @ Nov 23 2008, 19:31) Да, ...   Nov 23 2008, 16:54
||- - Огурцов   Цитата(Petka @ Nov 23 2008, 16:54) Заблуж...   Nov 23 2008, 21:47
||- - SKov   Цитата(Огурцов @ Nov 24 2008, 00:47) Аха,...   Nov 24 2008, 08:45
|- - Juras Pr.   Цитата(ae_ @ Nov 23 2008, 15:30) Если взя...   Nov 23 2008, 13:43
- - spf   Посмотри, может что-то из этого поможет http://vrt...   Nov 23 2008, 16:05
|- - galjoen   2 Juras Pr. А почему-бы просто не вычислять CRC от...   Nov 23 2008, 18:16
- - ARV   предлагаю чрезвычайно простой, но в определенных с...   Nov 23 2008, 17:18
|- - Juras Pr.   Цитата(ARV @ Nov 23 2008, 19:18) ...испол...   Nov 23 2008, 18:09
- - andran25   Вычислял когда-то. Вот тут можно взять: http://an...   Nov 23 2008, 20:12
- - Juras Pr.   andran25, спасибо, а также всем, кто подсказывал ...   Nov 23 2008, 22:24


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 00:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01412 секунд с 7
ELECTRONIX ©2004-2016