Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
стасюк.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
67.24 Кб
Скачать

3.2.3. Вибір множника

Коли період послідовності має довжину m, кожне число від 0 до (m-1) зустрічається за період рівно один раз. Тому вибір початкового значення X0 не впливає на довжину періоду. Для забезпечення лінійної конгруентної послідовності максимальної довжини необхідно, щоб:

  • a,c і m, були взяємно простими числами;

  • якщо m являє собою степінь двійки (тобто процессор працює в двійковій системі числення), то вибираємо множник тамким, щоб

a mod 8 = 5;

  • множник а повинен перевищувати величину √m, бажано, щоб він був більше m/100, але менше m-√m.

У таблиці 3 наведені 10 значень множників, які задовольняють приведеним вище критеріям, що накладаються на вибір множника а для лінійної конгруентної послідовності при m=8191.

Таблиця 3.

a0

a1

a2

a3

a4

a5

a6

a7

a8

a9

101

107

131

157

163

173

179

197

211

227

3.2.4. Вибір збільшення

Вище було визначено, що с і m повинні бути взаємно простими числами. У таблиці 4 приведені значення збільшень с, які задовольняють приведеним критеріям з похибкою не більше 1%.

Таблиця 4.

Збільшення

Значення

Похибка %

с1

1721

-0.57

с2

1723

-0.46

с3

1733

+0.12

с4

1741

+0.58

с5

1747

+0.93

3.2.5. Остаточний вібір значень

Для спрощення написання програми на АСЕМБЛЕРІ 1810, поставимо перед собою критерій: псевдовипадкове число повинно знаходитись у діапазоні [0,255], а в бенкер генератора повинно бути записано 10 псевдовипадкових чисел.

У ролі модуля, збільшення, множника візьмемо: a=101, c=1733, m=8191. Так як від початкового значення X0 період послідовності не залежить, а наш критерій [0,255], то потрібно взяти його з цього діапазону, довільним. Нехай це будет число X0=157

П обудуємо математичну модель нашої послідовності:

4. Програмна реалізація

4.1. Текст програми

TITLE

SSEG SEGMENT PARA STACK 'STACK'

DB 256 DUP(0)

SSEG ENDS

DSEG SEGMENT PARA PUBLIC 'DATA'

a Dw 1 DUP(131)

c DW 1 DUP(1733)

m DW 1 DUP(8191)

x DW 1 DUP(157)

DSEG ENDS

CSEG SEGMENT PARA PUBLIC 'CODE'

ASSUME CS:CSEG,DS:DSEG,SS:SSEG

General PROC FAR

mov ax,DSEG

mov di,ax

Start: mov si,0

mov ax,0

clc

mov ax,x

mov bx,a

k: mul WORD PTR[bx]

add ax,c

sub m,ax

abc: cmp ax,m

jb stasiuk

mov ax,dx

sub m,ax

loop abc

stasiuk: mov [si],dx

cmp si,10

jnb olia

inc si

mov ax,dx

jmp k

olia: jmp Start

General ENDP

CSEG ENDS

END General