|
Псевдослучайный генератор чисел, Нужен несложный алгоритм |
|
|
|
 |
Ответов
|
Nov 22 2008, 21:00
|

Участник

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

|
Я попробовал сдвигать влево один байт, перед сдвигом беру 3-й и 6-й биты (с другими битами получается хуже), применяю к ним XOR и результат заношу после сдвига в 0-й бит байта. А в результат беру 5 младших битов. Перед запуском в этот регистр (байт) было занесено значение $55. После прогона алгоритма 3 раза (по 32 каждый) получилась такая диграмма распределения.
При увеличении числа прогонов диаграмма почти выравнивается. Да, пользователь будет иногда нажимать кнопку, а таймер работает с высокой частотой, поэтому его я попробую задействовать. Этот алгоритм я буду писать на ассемблере.
Сообщение отредактировал Juras Pr. - Nov 22 2008, 21:03
|
|
|
|
|
Nov 23 2008, 00:20
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Когда-то экспериментировал, только проверьте: длинну регистра нужно брать m = 2^n - 1, один бит крайний, второй может быть перед ним, либо самый первый, длиннна последовательности 2^m - 1, регистр инициализировать любым числом, отличным от нуля. Имхо, точно работает для 7, 15, 31 бит.
Сообщение отредактировал Огурцов - Nov 23 2008, 00:22
|
|
|
|
|
Nov 23 2008, 12:05
|
Знающий
   
Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119

|
Цитата(Огурцов @ Nov 23 2008, 03:20)  только проверьте: длинну регистра нужно брать m = 2^n - 1 Это, конечно, преувеличение. Длину регистра можно брать любую. Для каждой длины m можно найти примитивный элемент поля GF(2^m), который даст на выходе регистра последовательность максимальной длины. В том числе можно подобрать и такой прим. элемент, который потребует только один сумматор в обратной связи. Кстати, этот вариант хоть и прост в реализации, но дает не очень хороший датчик. Чем больше сумматоров, тем датчик "псевдослучайнее".
|
|
|
|
|
Nov 23 2008, 13:22
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(SKov @ Nov 23 2008, 12:05)  Длину регистра можно брать любую. Конечно, при условии, что есть возможность физически проверить всю последовательность. Цитата(SKov @ Nov 23 2008, 12:05)  В том числе можно подобрать и такой прим. элемент, который потребует только один сумматор в обратной связи. Да, я на это и намекал.
|
|
|
|
|
Nov 23 2008, 18:58
|
Знающий
   
Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119

|
Цитата(Огурцов @ Nov 23 2008, 16:22)  Конечно, при условии, что есть возможность физически проверить всю последовательность. Никто физически ничего не проверяет. Есть такая наука, называется теория конечных полей. Она занимается теоремами и доказательствами и не использует "физических" проверок  Есть таблицы примитивных элементов, которые уже "проверили". Если не ошибаюсь, в книжке Лиддла и Нидеррайтера есть таблицы, которые можно использовать для создания регистров сдвига длиной до 160, которые будут гарантированно генерировать последовательность бит с периодом 2^160. Если будет свободное время, попробуйте проверить этот период "физически." Кажется, это число сильно больше, чем число атомов в видимой части Вселенной
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|