Сборник по задачам и примерам Assembler



Мультипликативный конгруэнтный метод генерации последовательности случайных чисел



Мультипликативный конгруэнтный метод генерации последовательности случайных чисел

Мультипликативный конгруэнтный метод задает последовательность неотрицательных целых чисел Xj (Xj<m), получаемых по формуле:

Хn+1=аХn(mod m). (2)

На значения накладываются ограничения:

  • Хо — нечетно;
  • а=52р+1 (р=0, 1, 2, ...) или a=2m+3 (m=3, 4, 5, ...) — обе эти записи означают, что младшая цифра а при представлении а в восьмеричной системе счисления должна быть равна 3 или 5 (проще говоря, остаток от деления а/8 должен быть равен 3 или 5);
  • m=2 (1>4).
  • При соблюдении этих ограничений, длина периода будет равна m/4.

    :randjnult_cong_l.asm - датчик линейной (мультипликативной) :конгруэнтной последовательности случайных чисел (с=0).

    :Вход: Хо. a, m - в соответствии с указанными выше ограничениями. .-Выход: dl - значение очередного случайного числа.

    .data

    in db 128

    a db 11

    х db 3 начальное значение

    .code

    ;первое число в последовательности х-3

    cycl: moval.x вычисляем очередное случайное число Х=(а*Х) mod in

    mul а :а*х в ah:al

    divm ;в ah случайное число

    mov x.ah ;вывод в файл - командная строка rand_mu1t_cong.exe > p.txt

    mov dl .ah

    mov ah.02

    nit г»

    jmp cyc1

    end cycl:

    Если m является степенью 2, как в данном случае, то вместо команды DIV мож-, но использовать две команды сдвига.

    ;----------------------------------------------------------

    ;rand_mult_cong_2.asm - датчик линейной (мультипликативной) конгруэнтной последовательности

    ;случайных чисел (c=0).

    ;Вход: X0, a, m - в соответствие с указанными выше ограничениями.

    ;Выход: dl - значение очередного случайного числа.

    ;----------------------------------------------------------

    masm

    model small

    .486

    .data

    m db 128 ;128=27

    a db 11

    x db 3 ;начальное значение

    .stack 256

    .486

    .code

    main:

    mov dx,@data

    mov ds,dx

    xor dx,dx

    mov cl,7 ;значение степени m=27 в cl

    ;первое число в последовательности x=3

    cycl:

    ;вычисляем очередное случайное число X=(a*X) mod m

    mov al,x

    mul a ;a*x в ah:al

    shrd ax,ax,cl




    Содержание  Назад  Вперед