ГОСТРИСО 28640 - 2012
static unsigned long mt [P| ;
static int mti=P+l :
/* массив состояния вектора*/
/• mti==P+l означает, что mt [Р| нс
инициализирован */
/* инициализация mt |Р] с начальным значением а */
void init_gcnrand (unsigned long s)
I
mt (0) = s & OxffffffffUL ;
for (mti=l ; mti<P : mti++){
mt | mti 1= (1664525UL • mt |mti-l) + IUL) ;
mt | mti | &= OxffffffffUL :
)
1
/* генерация случайного числа из ннтсрвала[0, Oxffffffff) *7
unsigned long genrand (void)
l
unsigned long у ;
static unsigned long magOI (2) = {OxOUL. MATRIX_A) ;
for <kk=0 ; kk<P-Q ; kk++) (
у = (mt (kk1 &UPPER.MASK) I (mt Ikk+lJ &LO\VKR_MASK) ;
mt |kk) = mt |kk+Q] л (у »I> л magOI fy & OxIL’L] :
1
for ( : kk<P-l : kk++) |
у = (mt |kk| &UPPHR_MASK) I (mt Jkk+1] &LOWER_M ASK) :
mt (kk) = mt |kk+ (Q-P) | A(y »1) A magOI (y & OxIL’L] ;
)
у = (mt (Р-l) &UPPER_MASK) I (mt [0| &LOWER_MASK) ;
mt | P-1) = mt IQ-1] л (у »1) л magOI (у & Oxl UL) ;
mti = 0 ;
)
у = mt ]mti++) :
/* magOI lx] = x * MATR1X_A для x=0. i */
if (mti >=P) ]
int kk ;
/* генерация P слов одновременно */
if (mti == P+l)
init_gcnrand (5489UL) ;
/* если init _gcnrand ( ) нс вызвано */
/* использовано нс подходящее начальное
значение*/
У А= ( У » 11) :
у Л= (у « 7) & 0x9d2c5680UL :
31