Быстрые генераторы ПСЧ на основе LFSR

Программирование, алгоритмы

Postby VBI » Tue, 01.12.2015 15:57:10

psb, RANDOM - это организатор СС
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby g0blinish » Tue, 01.12.2015 16:01:07

psb wrote:g0blinish, JP M - это комментарий.


а без комментария?
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby TS-Labs » Tue, 01.12.2015 16:36:25

VBI, LVD это Low-voltage differential signaling.
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Postby VBI » Tue, 01.12.2015 17:40:11

TS-Labs, VBI это Vertical Blanking Interval.
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby g0blinish » Tue, 01.12.2015 17:48:35

пиздюки, ответьте на мой ответ!
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby VBI » Tue, 01.12.2015 18:24:02

отвечает Друзь
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby introspec » Tue, 01.12.2015 18:25:48

Может хорош фигню-то писать, а, шутники?
User avatar
introspec
 
Posts: 579
Joined: Sun, 14.07.2013 15:36:47

Postby g0blinish » Tue, 01.12.2015 18:27:41

не, нужно, да.
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby TS-Labs » Thu, 10.03.2016 18:21:43

introspec wrote:Вариант 3: Длина последовательности 224-1, вырожденный полином, время работы 90 тактов (для битов) или 90+11=101 такт (для байтов).

introspec wrote:Вариант 4: Длина последовательности 224-1, полином получше, время работы 106 тактов (для битов) или 106+11=117 тактов (для байтов).

В обоих последовательностях есть места из подряд идущих нулей в количестве до восьми. Как воркэраунд можно написать отлов последовательно одинаковых байт.
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Postby introspec » Thu, 10.03.2016 18:44:07

Нужно на самом деле поискать более научный способ замешивания байтов. Визуально оба варианта выглядят вполне себе ОК и для 1Д и для 2Д тестов.
Конечно, я думал в первую очередь о скорости.
User avatar
introspec
 
Posts: 579
Joined: Sun, 14.07.2013 15:36:47

Postby g0blinish » Thu, 10.03.2016 18:46:36

introspec, куда пропал?(:
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby introspec » Thu, 10.03.2016 19:08:49

Работаю.
User avatar
introspec
 
Posts: 579
Joined: Sun, 14.07.2013 15:36:47

Postby psb » Thu, 10.03.2016 19:10:32

хороший научный способ (проверенный временем) - десятки раундов нелинейной функции.
User avatar
psb
 
Posts: 715
Joined: Tue, 30.12.2014 23:22:32

Postby introspec » Thu, 10.03.2016 19:13:29

"Десятки раундов нелинейной функции" - за 15 или даже 11 тактов?!
User avatar
introspec
 
Posts: 579
Joined: Sun, 14.07.2013 15:36:47

Postby TS-Labs » Thu, 10.03.2016 19:22:08

Так, продолжая тему "илитного" генератора (сорри за офтоп), вариант на сях.

Code: Select all
#include <string.h>

u8 seed[4];

void rnd_init(u32 s)
{
  *(u32*)seed = s;
}

u8 rnd()
{
  u8 c;
  c = seed[0] + seed[1] + seed[2] + seed[3];
  c = (c << 1) | ((c >> 7) & 1);
  seed[0] = seed[1];
  seed[1] = seed[2];
  seed[2] = seed[3];
  seed[3] = c;
  return c;
}

void test(u32 s)
{
  u8 t1[sizeof(seed)];
  u32 cyc = 0;
 
  rnd_init(s);
  for (int i = 0; i < sizeof(seed); i++)
    t1[i] = rnd();
 
  while (1)
  {
    rnd();
    cyc++;
    if (!memcmp(t1, seed, sizeof(seed))) break;
  }
 
  printf("Seed: %d, Cycles: %d\n", s, cyc);
}

int main()
{
  int a = 1;

  while (1)
    test(a++);
}


Тест замеряет количество циклов, через которое зацикливается последовательность.
Длина оной зависит от выбранного сида (который не должен быть равен 0).
Цифры неслабые - от 300млн и выше.
Потенциально длину сида можно увеличить с 4 для удлинения цикла.
Last edited by TS-Labs on Thu, 10.03.2016 19:30:22, edited 1 time in total.
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Postby introspec » Thu, 10.03.2016 19:29:16

Я не понимаю эту вашу страсть к велосипедам. Зачем говнокодить говно, если есть Mersenne Twister?
Давайте всё же перестанем складывать сюда всё напетое Рабиновичем и ограничимся БЫСТРЫМИ генераторами чего-то ПРИЛИЧНОГО.

Для танкистов:
1. БЫСТРОЕ означает не более 110 тактов Z80.
2. ПРИЛИЧНОЕ означает - адекватные результаты в по крайней мере 2х базовых тестах:
  • "1D" заливке экрана подряд созданными байтами
  • "2D" рисовании точек с координатами (раз случайный байт, два случайный байт)
User avatar
introspec
 
Posts: 579
Joined: Sun, 14.07.2013 15:36:47

Postby TS-Labs » Thu, 10.03.2016 19:31:11

Хокей, хокей. Спасибо за сцылко )
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Previous

Return to Coding

Who is online

Users browsing this forum: No registered users and 0 guests

x