РЕДАКТИРОВАТЬ: ES6: прокат и тестирование моего собственного генератора хеш-ключей PRNG? - PullRequest
0 голосов
/ 30 января 2019

[РЕДАКТИРОВАТЬ: сообщение было изначально слишком длинным ... пытаясь его укоротить!]

для создания приложения на основе VNodes, мне нужна функция, которая может генерировать псевдослучайные числа, используемые в качестве уникальных идентификаторов, сразмером 3 или 4 байта.

Подумайте о случайных RGB или RBBA, CSS-подобных строковых цветах, таких как: «bada55» или «900dcafe» ... Пользователь может заполнить генератор, выбрав случайный пиксель в PNGimage, например.

Из-за функциональных аспектов моего приложения генератор должен выполнять чистую функцию avpoding побочных эффектов, таких как: использование Math.random ...

Я не знаю арифметических теорий(мои курсы еще в прошлом ...), но я решил создать пользовательский PRNG, используя парадигму Multiply-With-Carry (MWC), и проверить его эмпирически с некоторыми простыми коэффициентами и семенами случайных цветов.

Моя идея состоит в том, чтобы протестировать его с 1-байтовыми, 2-байтовыми, 3-байтовыми и затем 4-байтовыми выходными данными: мои чувства таковы:

  • определение «хороших» простых чисел и потенциальных «плохих»'семена, когда число байтов меньше
  • ипопробуйте проверить его на предмет количества байтов

[ИЗДАНО ЗДЕСЬ]

MCW обычно работает следующим образом:

# each turn, compute the i-th byte:
  Xi[i] = A * Zi[i] + Ci[i]
  Ci[i] = Math.floor((A * Zi[i] + Ci[i]) /  M)
  Zi[i] = Xi[i] % M

где A - множитель, C приращение и M модуль.Для байтов модуль равен 256.

Математически можно определить A и C (простые числа), чтобы получить генератор полного цикла.

Проблема в том, что, когда байтовая ячейка начинает циклк его начальному значению, ВСЕ ячейки делают это ... таким образом, период составляет 256 для 4 байтов!

Мне нужно построить что-то вроде одометра, чтобы сдвинуть значения ячеек othrt и гарантировать получение Math.pow (256, 4).

Как это сделать простым способом, если это возможно?

...