Метод Фибоначчи с запаздыванием

Статистические свойства чисел, генерируемых линейным конгруэнтным алгоритмом, делают невозможным их использование для решения задач, чувствительных к качеству случайных чисел. В связи с этим линейный конгруэнтный алгоритм постепенно потерял свою популярность. Его место заняло семейство фибоначчиевых алгоритмов, позволяющих получать более качественные последовательности псевдослучайных чисел. В англоязычной литературе фибоначчиевы датчики называют обычно «Subtract-with-borrow Generators» (SWBG).

Один из фибоначчиевых датчиков основан на следующей итеративной формуле:

где − вещественные числа из интервала [0; 1], a, b − целые положительные числа, называемые лагами. Для работы фибоначчиеву датчику требуется знать максимальные значения предыдущих сгенерированных случайных чисел. При программной реализации для хранения полученных чисел используется конечная циклическая очередь на базе массива. Для старта фибоначчиевому датчику требуется случайных чисел, которые могут быть сгенерированы простым конгруэнтным датчиком. Лаги a и b не следует выбирать произвольно. Рекомендуются следующие пары значений лагов: a = 55, b = 24; a = 17, b = 5; a = 97, b = 33. Качество получаемых случайных чисел зависит от значения константы a, чем оно больше, тем выше размерность пространства, в котором сохраняется равномерность случайных векторов, образованных из полученных случайных чисел. В то же время с увеличением величины константы возрастает объём используемой алгоритмом памяти.

Получаемые случайные числа обладают хорошими статистическими свойствами, причём все биты случайного числа равнозначны по статистическим свойствам. Период фибоначчиева датчика может быть оценен по следующей формуле:

,

где – число битов в мантиссе вещественного числа.