ГОСТ Р ИСО 28640 - 2012
LET у = Хог32( And32(mt(P-1) , UPPER_MASK) ,
And32(mt(0) , LOWER.MASK))
! у * <mt|P-l 1 & UPPER_MASK)I
<mt[()]&LOWER_MASK);
LETmt(P-l)=Xor32(Xor32(mt(Q-l).! mt[P-l | = ml(Q-l) л (у »l> A magOl
SR32U(y .1)) . mag()l( And32(y . 1)))
LET mti = 0
END IF
LET у = mt(nui)
LET mti = mti + 1
REM /* Темперирование */
LET у = Xor32(y . SR32U(y .11))
LET у = Xor32(y , And32(SL32U(y . 7)
ВVAL(’4)d2c5680" . 16)))
LET у = Xor32(y . And32(SL32U(y.15)
ВVAL("cfc60000* . 16)))
LET у = Xor32(y . SR32U(y .
18
))
LET gen rand = у
END FUNCTION
REM
|y & OxIULJ:
! mli = 0;
! )
! у = mt|mti ++);
! у л= (у »
II);
! у л= (у «
7) & 0x9d2c5680UL;
! у л= (у «
15) & 0xefc600O0UL:
18):
! У л= (У »
! return у;
!)
REM /* генерация случайного числа из интервала (0,0x7fffffff) */
FUNCTION gcnrand_3l!long gcnrand_3l(void) {
LET gcnrand_31 = SR32U(genrand . 1)
!return (long)(gcnrand()»l):
END FUNCTION
!)
B.5 Линейный конгруэнтный метод
B.5.1 Общие положения
В.5.1.1 Применение
Линейные конгруэнтные методы широко применяют в программном обеспечении, так
как они сочетают в себе экономное использование памяти компьютера с высокой скоростью
исполнения. Однако эти методы имеют относительно короткий период и, следовательно, не
всегдаобеспечиваютдостаточнуюслучайностьгенерируемыхчисел,особеннопри
необходимости получения случайных многомерных последовательностей.
В.5.1.2 Определение
Большая часть линейных конгруэнтных методов генерирует последовательности
псевдослучайных чисел X,. Х2,.... используя следующее рекуррентное соотношение
Хл = mod (aX„.t + с; т) п = 1.2
.......
где а и т - положительные целые числа, с - неотрицательное целое число.
Линейный конгруэнтный метод определен, как только заданы значения параметров а. т
и с. Кроме того, если задано начальное число Х«, полученная последовательность чисел
однозначно определена.
34