На практике поток битов из генератора псевдослучайных чисел объединяется с другими данными, которых требует GPS, – такой метод называется модуляцией. Спутник передает данные с относительно невысокой скоростью: 50 бит в секунду. Он соединяет этот сигнал с куда более быстрым потоком битов из генератора псевдослучайных чисел, скорость которого более миллиона
Мало того, GPS проделывает то же самое и с другим псевдослучайным числом, модулирующим сигнал на вдесятеро большей скорости. Более медленный сигнал называется «код грубого определения местоположения объектов» и предназначен для гражданского использования. Более быстрый – «точный код» – зарезервирован для военных. Он, кроме того, зашифрован и повторяется не чаще чем раз в семь суток.
Генераторы псевдослучайных чисел, как правило, основаны на абстрактной алгебре, такой как многочлены над конечными полями, или на теории чисел, такой как целые числа по некоторому модулю. Простой пример последнего – линейный конгруэнтный генератор. Выберем модуль
где
1 8 12 7 9 15 16 2 11 4 0 5 3 14 13 10,
которая затем повторяется бесконечно. Никаких явных закономерностей, заметных глазу, здесь нет. На практике, разумеется,
Линейные конгруэнтные генераторы слишком просты, чтобы быть надежными, поэтому были разработаны более сложные варианты. В качестве примера можно назвать вихрь Мерсенна, который придумал Макото Мацумото в 1997 году. Такой генератор наверняка есть у многих из вас, потому что он используется в десятках стандартных программных пакетов, в том числе в Microsoft Excel. В вихре Мерсенна сочетаются простые числа, благодаря которым математика упрощается, и симпатичные двоичные выражения, упрощающие вычисления. Простое число Мерсенна – это число вида 2
В двоичном виде два простых числа Мерсенна выглядят так:
31 = 11111
131 071 = 11111111111111111
и представляют собой 5 и 17 единиц соответственно. Это позволяет цифровому компьютеру легко оперировать ими при вычислениях. Вихрь Мерсенна основан на каком-нибудь очень большом простом числе Мерсенна, обычно 219 937
–1, и он заменяет числа в сравнениях матрицами над полем с элементами 0 и 1. Этот метод удовлетворяет тестам для подстрок длиной вплоть до 623 бит.