ГОСТРИСО 28640 - 2012
Приложение В
(справочное)
Алгоритмы генерации псевдослучайных чисел
В.1 Текст программы трехиараметрнческого метода GFSR
Ниже приведен текст программы на языке Си. которая в соответствии с ИСО/МЭК 9899
является примером метода GFSR с параметрами (р. <у. и) = (1279, 418, 32) и периодом
(21"79- 1). При обращении к функции gfsr () происходит генерация целого числа из интервала от
0 до (2 *- 1) включительно. При обращении к функции gfsr_31() происходит генерация целого
числа из интервала от 0 до (2Л| - 1) включительно. Для обращения к функциям gfsr () и
gfsr_31 О необходима единственная инициализация init_gfsr (s). Функция inii_gfsr(s) выполняет
инициализациюприусловии,чтовкачественачальногочислаиспользуется
32-бнтовое целое число без знака [целое число из интервала от 0 до (2’* - 1)]. Полученная
последовательность обеспечивает 39 независимых серий псевдослучайных чисел, каждая из
которыхобладаетнезначительнойавтокорреляцией,имеет39-мерноераспределение
(однородно распределена в 39-мерном гиперкубе) с 32-битовой точностью, и ее функция
автокорреляции такова, что значения близкие к нулю появляются через 21274чисел.
Чтобы получить другую последовательность псевдослучайных чисел, необходимо
изменить начальное число л в функции init
_
gfsr (s). В программе могут быть изменены только
константы />. г/, »г. Значение н1должно быть равно 2 в целой степени в соответствии с длиной
слова машины. Значение и\ в общем случае, равно 32 или 64 в зависимости от возможностей
машины. Например, если длина слова машины 64, постоянную w в программе устанавливают
равной 64, а функция gfsr ( ) генерирует целые числа из интервала от 0 до (264 - 1)
включительно, в то время как функция gfsr_31 ( ) генерирует целые числа из интервала от 0 до
(263 - 1) включительно.
В данной программе предполагается, что длина «беззнакового длинного целого»
составляет не меньше 32 бит.
Текстпрограммы трехиараметрнческого GFSR на языке Си
* « * * « 4 * 4 а * * * * * * * * * + » + а * 4 * 4 * > М ‘4 4 * 4 * 4 * 4 *> 4 *4 *4 »****«/
«define Р 1279
«define Q 418
«define W 32 /* значения W должны быть степенью 2 */
static unsigned long state lPJ :
static int slate_i ;
19