[РЕДАКТИРОВАТЬ: сообщение было изначально слишком длинным ... пытаясь его укоротить!]
для создания приложения на основе 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).
Как это сделать простым способом, если это возможно?