ГОСТ Р ИСО 28640 - 2012
т-м /»+**+*■*ь+ц*****+*+•+*■**•+•+•***+•****+*•+*+*•+•+•++*+•++
КЕМ Текст программы линейного конгруэнтного метода на языке BASIC
КЕМ • +*■**•*•****•***• 4*в**4*-»**•*•* *4 «••♦*4 *4*4** +*4***»+/
КЕМ
REM/4444444444444444444*44444444444444444444*4444444444444444
КЕМ Часть 2. Modulus = 2Л31-1 = 2147483647
КЕМ • +**+*’+•**’**^ +*******»+*’**:**’*+**+ *-’ч*
OPTION BASE О
DECLARE NUMERIC NBIT
LET NBIT = 15
DECLARE NUMERIC MASK
LET MASK = SL32UO , NBIT) - I
DECLARE NUMERIC MASK2
LET MASK2 = SL32UO , 24NBIT) - I
DECLARE NUMERIC MULTIPLIER
LET MULTIPLIER = 2100005341
DECLARE NUMERIC MULTIPLIER.LO
LET MULT!PLIER_LO = And32 (MULTIPLIER.
MASK)
DECLARE NUMERIC MULTIPLIER_HI
LETMULTIPLIERS!=SR32U( MULTIPLIER
NBIT)
DECLARE NUMERIC statc3!
REM /••***• +•’***+•+•*****+*+**•*+•*****+**
FUNCTION lcong3 1
DECLARE NUMERIC xlo. xhi
DECLARE NUMERIC zO. zl. z2
LET zO = xlo - MULTIPLIER.LO
LET zl = xlo • MULTIPLIERS!
LET zl = zl + xhi ♦ MULTIPLIER.LO
LET z2 = xhi • MULTIPLIERS!
!#dcfinc NBIT 15
! «define MASK ((1«N B IT )-I)
! «define MASK2 ( ( 1 « (2 4NBIT>)-1)
! «define MULTIPLIER 2100005341UL
! «define MULTIPLIER.LO (MULTIPLIER*
MASK )
! «define MULTIPLIER.HI (MULTIPLIER»
NBIT )
’static unsigned long statc31:
Hong lcong3I( void ) |
! unsigned long xlo. xhi:
! unsigned long zO. zl. z2;
LET xlo = And32(statc31 , MASK)! xlo = state3l & MASK;//1st val:9
LET xhi = SR32U(stalc31 . NBIT)’ xhi = state3 1 » NBIT://1st val:600
! zO = xlo * MULTIPLIER.LO;
/• !5bit 4 I5bit => 30bil •/
! zl = xlo 4 MULTIPLIER.HI + xhi 4
MULTIPLIER.LO:
! /* 15bit 4 16bit 4 2 => 32bit 4/
’ z2 = xhi 4 MULTIPLIER.HI;
/• 16bit4 16bit => 32bit •/
40