ГОСТ Р ИСО 28640 - 2012
В.5.2.3 Вариант т = 2й - I
Каждый раз при обращении к функции lcong3l () она формирует случайное целое число
из интервала от 1 до (2м - 2) включительно. Результат имеет тип «длинного целого числа».
Функция инициализации init_lcong31 (использующая длинное целое начальное число без знака)
устанавливает в качестве начального числа неотрицательное целое число. Как и в таблице
В.1. второе слагаемое с всегда равно 0. Поэтому начальное число Ха не должно быть
равно 0. Однако, если Хо = 0, в качестве Хи используют специальное число (19 660 809).
В других случаях в качестве Хо используют mod(Xo*: т).
Для изменений значений множителя необходимо его указать в операторе присвоения
константе MULTIPLIER в тексте программы.
«•
4
»
4 4 4 4
«
44
-
4 4 4
**«*
4
*
4 4
«
4
*
4
*
4 4
»
4
«
4 4
»
4
»
4
«
4
*»
4 4 4 4 4
*«
4
»
4
*
4«-4
♦*/
Текст программы линейного конгруэнтного метода на языке С’и
>
<
4
»
4
*
4 4 4 4
«
44 4 4 4 4 4 4
*
4
*»
4
»
4
«
4
«
4 4
»
4
«
4 4
»
4
»*«-
4
*»
4 4 4
*
4
«
4 4
*
4
*
4
«
4 4
»/
<
Часть I. Modulus = 2А32
4
»
4
*
4 4
*
4
»
4 4 4 4
»
4
*
4
*
4
*»
4
»
4
«
4
«
4 4
»
4
«
4 4
»
4
»*«-
4
*»
4 4 4
*
4
«
4 4
*
4
*
4
*
4 4
»/
«define MULTIPLIER 1664525UL
«define INCREMENT 1UL
Static unsigned long statc32 :
Unsigned long lcong32( void )
1
state32 = ( statc32 * MULTIPLIER + INCREMENT ) & OxFFFFFFFFUL:
return statc32;
1
long lcong32_31( void )
1
statc32 = <statc32 • MULTIPLIER + INCREMENT ) & OxFFFFFEFFUL;
return stutc32>>!;
1
void init_lcong32(unsigned long s)
1
/* начальное число должно быть нечетным, если слагаемое INCREMENT равно 0 */
if ( (INCREMENT==0) && (s%2 == 0) ){
s++ ;
)
statc32 = s :
37