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

 
 
> Xorshift ГПСЧ, есть вопросы
zombi
сообщение Aug 27 2011, 18:43
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Натолкнулся вот на такой ГПСЧ :
Код
uint32_t xor128(void) {
  static uint32_t x = 123456789;
  static uint32_t y = 362436069;
  static uint32_t z = 521288629;
  static uint32_t w = 88675123;
  uint32_t t;

  t = x ^ (x << 11);
  x = y; y = z; z = w;
  return w = w ^ (w >> 19) ^ (t ^ (t >> 8));
}

Возникло несколько вопросов:

1: x = 123456789; y = 362436069; z = 521288629; w = 88675123; Это ,я так понял, десятичные начальные значения переменных?

2: могут ли эти начальные значения быть любыми (кроме 0 конечно) или в них есть тайный смысл?

3: результатом работы ГПСЧ есть 32-х битное число, а если мне достаточно одного байта то какой (из 4-х байт) лучше использовать?

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dr.NoA
сообщение Sep 1 2011, 12:06
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 316
Регистрация: 22-10-05
Пользователь №: 9 976



Что-то я не пойму следующее. Если автору темы требуются 8-битные случайные числа, то чем не устраивает 8-битный генератор с периодом 2^8-1? Какой смысл тратить ресурсы на 32-разрядный генератор, а потом брать только 8 бит, если все равно выходные значения в лучшем случае будут иметь период 2^8-1 (при этом еще большой вопрос на счет периода и свойств распределения этого выходного байта)?
Go to the top of the page
 
+Quote Post
zombi
сообщение Sep 1 2011, 16:45
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(Dr.NoA @ Sep 1 2011, 15:06) *
Что-то я не пойму следующее. Если автору темы требуются 8-битные случайные числа, то чем не устраивает 8-битный генератор с периодом 2^8-1?

Т.е. через 255 шагов можно точно предсказать следующее значение rnd biggrin.gif это абсолютно не приемлемо для меня.

Цитата(Dr.NoA @ Sep 1 2011, 15:06) *
Какой смысл тратить ресурсы на 32-разрядный генератор, а потом брать только 8 бит, если все равно выходные значения в лучшем случае будут иметь период 2^8-1

ошибаетесь

Цитата(Dr.NoA @ Sep 1 2011, 15:06) *
(при этом еще большой вопрос на счет периода и свойств распределения этого выходного байта)?

Если тесты на "случайность" одобряют этот алгоритм значит состояние любого бита тоже случайно и думаю что сколько бы бит из 32-х не взять (хоть даже 1) все должно быть случайно.
Правда смутные сомнения терзают biggrin.gif поэтому решил взять 16 бит.


По большому счету мне нужен рнд генератор в заданном диапазоне ( к примеру 0-23 , 0-75 , 0-300 и т.д.)
Реализовать нужно на асме.
Есть подпрограммы умножения 16b х 16b = 32b, и деление сделаю вычитанием.
Хочу вот так сделать (поправте если ошибаюсь или перемудрил чего):

1. беру любые 16 бит XORSHIFTa
2. умножаю на 10000, получаю 32-х битное число.
3. делю это на 65536 (>>16) получаю случайное число в диапазоне 0 - 9999
4. умножаю на максимальное значение диапазона
5. делю это все на 10000
Go to the top of the page
 
+Quote Post
Dr.NoA
сообщение Sep 2 2011, 14:01
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 316
Регистрация: 22-10-05
Пользователь №: 9 976



Цитата(zombi @ Sep 1 2011, 20:45) *
Т.е. через 255 шагов можно точно предсказать следующее значение rnd biggrin.gif это абсолютно не приемлемо для меня.

Ну да, при 8-разрядном генераторе период в лучшем случае будет 255 шагов, но для многих задач это вполне приемлемо. Но насколько это годится для Вашей задачи я знаю, т.к. не телепат. Но поскольку Вы уже уточнили, что нужны числа в диапазоне 0-9999, то, очевидно, что 8-разрядный генератор не подходит.

А что касается непредсказуемости Вашего генератора, то от того, что вместо 8 бит Вы будете использовать 16 или 32 разряда ничего особо не изменится. Насколько я понимаю, xorshift-генератору можно поставить в соответствие эквивалентный регистр сдвига с линейно обратной связью, который будет давать такую же последовательность. Порождающий полином этого регистра можно будет восстановить по реализации Вашей псевдослучайной последовательности, и на этом вся Ваша "случайность" закончится. Но опять таки будет ли кто-то со стороны пытаться "сломать" Ваш генератор я не знаю, т.к. мне Ваша задача неизвестна.
Go to the top of the page
 
+Quote Post
zombi
сообщение Sep 2 2011, 16:13
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(Dr.NoA @ Sep 2 2011, 17:01) *
Но опять таки будет ли кто-то со стороны пытаться "сломать" Ваш генератор я не знаю, т.к. мне Ваша задача неизвестна.

Ломать врядли комуто понадобится.

А задача из области имитации.
Просто до сих пор был генератор в основе которого огромный массив заранее
полученных значений различных ГПСЧ с бегающими по нему N указателями c разной скоростью и "человеческим фактором".
Вот хочу отказаться от оного.

Реализовал хоршифт, сейчас тестирую.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zombi   Xorshift ГПСЧ   Aug 27 2011, 18:43
- - ae_   Цитата(zombi @ Aug 28 2011, 03:43) x = y;...   Aug 28 2011, 09:57
|- - zombi   Спасибо ae_ Цитата(ae_ @ Aug 28 2011, 12...   Aug 28 2011, 10:18
|- - ae_   Цитата(zombi @ Aug 28 2011, 19:18) Т.е. е...   Aug 28 2011, 10:27
|- - zombi   Цитата(ae_ @ Aug 28 2011, 13:27) Как нахо...   Aug 28 2011, 10:31
|- - ae_   Google на запрос xorshift выдаёт второй строкой сс...   Aug 29 2011, 06:58
|- - 777777   Цитата(zombi @ Aug 28 2011, 14:31) ОК. в ...   Aug 30 2011, 09:15
- - xemul   Цитата(zombi @ Aug 27 2011, 22:43) 3: рез...   Aug 30 2011, 10:10
|- - zombi   Цитата(777777 @ Aug 30 2011, 12:15) Я бы ...   Sep 1 2011, 06:20
- - rx3apf   Отмечу, что у xorshift великолепное распределение,...   Sep 1 2011, 07:36
|- - zombi   Цитата(rx3apf @ Sep 1 2011, 10:36) Отмечу...   Sep 1 2011, 08:27
|- - ae_   Цитата(Dr.NoA @ Sep 1 2011, 21:06) Что-то...   Sep 1 2011, 12:34
|- - ae_   Цитата(zombi @ Sep 2 2011, 01:45) По боль...   Sep 1 2011, 23:03
||- - zombi   Цитата(ae_ @ Sep 2 2011, 02:03) Можно про...   Sep 2 2011, 06:14
- - zombi   Сутки тестировал. Результат превзошел все ожидания...   Sep 3 2011, 17:15


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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 08:23
Рейтинг@Mail.ru


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