Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программная реализация численных методов в длинной арифметике. Монография

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
1 Мб
Скачать

11.43

Решение уравнения dy/dx=cos(a-x*x)*sin(a-x*x) ..............................................

133

11.44

Решение уравнения dy/dx=cos(a-x*x)+sin(a-x*x) ..............................................

134

11.45

Решение уравнения dy/dx=sin(a/(x*x))/cos(a/(x*x)) ..........................................

134

11.46

Решение уравнения dy/dx=cos(a/(x*x))/sin(a/(x*x)) ..........................................

135

11.47

Решение уравнения dy/dx=cos(a/(x*x))*sin(a/(x*x)) .........................................

136

11.48

Решение уравнения dy/dx=cos(a/(x*x))+sin(a/(x*x)) .........................................

136

Заключение.......................................................................................................................

138

Список использованных источников ............................................................................

139

11

Введение

Рассмотренные примеры и задачи программной реализации численных мето-

дов в длинной арифметике предназначены для учебно-методического обеспечения комплекса дисциплин по направлению подготовки 09.03.02 Информационные си-

стемы и технологии, в том числе, по дисциплинам «Численные методы в инженер-

ных расчетах» и «Программирование прикладных задач дискретной математики»,

которые входят в состав обязательных дисциплин вариативной части.

Современные ЭВМ выполняют арифметические операции с ограниченным числом разрядов.

Разработанные алгоритмы и программы реализуют арифметические операции с любым количеством разрядов. Единственное ограничение - объем оперативной памяти.

Целью обучения по указанным дисциплинам является овладение современ-

ными методами и средствами технологии проектирования, разработки и реализации проблемно-ориентированных автоматизированных информационных систем в кор-

поративной локальной вычислительной сети предприятия.

Рассмотренные примеры и задачи программной реализации численных мето-

дов в длинной арифметике решаются при выполнении курсовых работ по рабочим программам комплекса дисциплин и позволяют формировать элементы следующих компетенций в соответствии с ФГОС ВО и ООП ВО по данному направлению под-

готовки:

ОПК-1 владением широкой общей подготовкой (базовыми знаниями) для ре-

шения практических задач в области информационных систем и технологий;

ПК-12 способностью разрабатывать средства реализации информационных технологий (методические, информационные, математические, алгоритмические).

12

1 Реализация вычислений в длинной арифметике на языках

программирования Фортран и С++

Для реализации вычислений в длинной арифметике были организованы для каждого числа два массива: массив, каждый элемент которого содержал разряд целой части числа, массив, каждый элемент которого содержал разряд дробной части числа.

Кроме этого для каждого числа вводилась целая переменная, которая содер-

жала знак этого числа.

Значение 1 соответствует положительному значению, значение (-1) отрица-

тельному значению.

1.1 Операция сложения

Непосредственное сложение двух вещественных значений осуществляет под-

программа sl.for.

Сложение двух вещественных значений с учетом знаков осуществляет под-

программа slzn.for.

В подпрограмме slzn осуществляется вызов подпрограммы sl.for для непо-

средственного сложения.

Вызов подпрограммы slzn.for:

call slzn(iz1, iz2, izrez, nc1, nd1, ic1, id1, nc2, nd2, ic2, id2, kcrez, kdrez, icrez, idrez,krazr).

Параметры при вызове подпрограммы slzn:

iz1 – знак первого слагаемого, целая четырехбайтовая переменная; iz2 – знак второго слагаемого, целая четырехбайтовая переменная; izrez – знак вычисленной суммы, целая четырехбайтовая переменная;

nc1 – количество разрядов в целой части первого слагаемого, целая четырех-

байтовая переменная;

13

nd1 – количество разрядов в дробной части первого слагаемого, целая четы-

рехбайтовая переменная;

ic1 – массив значений разрядов в целой части первого слагаемого, целые че-

тырехбайтовые;

id1 – массив значений разрядов в дробной части первого слагаемого, целые четырехбайтовые;

nc2 – количество разрядов в целой части второго слагаемого, целая четырех-

байтовая;

nd2 - количество разрядов в дробной части второго слагаемого, целая четы-

рехбайтовая;

ic2 - массив значений разрядов в целой части второго слагаемого, целые четы-

рехбайтовые;

id2 - массив значений разрядов в дробной части второго слагаемого, целые че-

тырехбайтовые;

kcrez – количество разрядов в целой части суммы, целое четырехбайтовое; kdrez - количество разрядов в дробной части суммы, целое четырехбайтовое; icrez - массив значений разрядов в целой части суммы, целые четырехбайто-

вые;

idrez - массив значений разрядов в дробной части суммы, целые четырехбай-

товые;

krazrколичество разрядов в дробной части длинной арифметики, целое че-

тырехбайтовое.

Пользователю для реализации длинного сложения надо вызвать подпрограмму

slzn.

1.2 Операция вычитания

Вычитание двух вещественных с учетом знаков осуществляет подпрограмма wiczn.for.

14

В подпрограмме wiczn осуществляется вызов подпрограммы wich для непо-

средственного вычитания.

Вызов подпрограммы wiczn:

call wiczn(iz1, iz2, izrez, nc1, nd1, ic1, id1, nc2, nd2, ic2, id2, kcrez, kdrez, icrez, idrez,krazr), где:

iz1 - знак уменьшаемого, целая четырехбайтовая, iz2 – знак вычитаемого, целая четырехбайтовая, izrez – знак разности, целая четырехбайтовая,

nc1 – количество разрядов в целой части уменьшаемого, целая четырехбайто-

вая;

nd1 – количество разрядов в дробной части уменьшаемого, целая четырехбай-

товая;

ic1 – массив значений разрядов в целой части уменьшаемого, целые четырех-

байтовые;

id1 - массив значений разрядов в дробной части уменьшаемого, целые четы-

рехбайтовые;

nc2 – количество разрядов в целой части вычитаемого, целое четырехбайто-

вое;

nd2 - количество разрядов в дробной части вычитаемого, целое четырехбайто-

вое;

ic2 – массив значений разрядов в целой части вычитаемого, целые четырех-

байтовые;

id2 - массив значений разрядов в дробной части вычитаемого, целые четырех-

байтовые;

kcrez - количество разрядов в целой части разности, целое четырехбайтовое; kdrez - количество разрядов в дробной части разности, целое четырехбайто-

вое;

icrez - массив значений разрядов в целой части разности, целые четырехбайто-

вые;

15

idrez - массив значений разрядов в дробной части разности, целые четырех-

байтовые;

krazr-количество разрядов в дробной части длинной арифметики, целое четы-

рехбайтовое.

Для реализации длинного вычитания пользователю необходимо вызвать под-

программу wiczn.

1.3 Операция умножения

Умножение двух вещественных в длинном формате осуществляет подпро-

грамм ymnzn.for с учетом знаков.

В подпрограмме ymnzn осуществляется вызов подпрограммы ymn для непо-

средственного умножения в длинном формате.

Вызов подпрограммы ymnzn:

call ymnzn(iz1, iz2, izrez, nc1, nd1, ic1, id1, nc2, nd2, ic2, id2, kcrez, kdrez, icrez, idrez,krazr), где:

iz1 - знак первого сомножителя, целое четырехбайтовое; iz2 – знак второго сомножителя, целое четырехбайтовое; izrez – знак произведения, целое четырехбайтовое;

nc1 – количество разрядов в целой части первого сомножителя, целое четы-

рехбайтовое;

nd1 – количество разрядов в дробной части первого сомножителя, целое четы-

рехбайтовое;

ic1 – массив значений разрядов в целой части первого сомножителя, целые че-

тырехбайтовые;

id1 - массив значений разрядов в дробной части первого сомножителя, целые четырехбайтовые;

nc2 – количество разрядов в целой части второго сомножителя, целое четы-

рехбайтовое;

16

nd2 - количество разрядов в дробной части второго сомножителя, целое четы-

рехбайтовое;

ic2 – массив значений разрядов в целой части второго сомножителя, целые че-

тырехбайтовые;

id2 - массив значений разрядов в дробной части второго сомножителя, целые четырехбайтовые;

kcrez - количество разрядов в целой части произведения, целое четырехбайто-

вое;

kdrez - количество разрядов в дробной части произведения, целое четырехбай-

товое;

icrez - массив значений разрядов в целой части произведения, целые четырех-

байтовые;

idrez - массив значений разрядов в дробной части произведения, целые четы-

рехбайтовые;

krazr-количество разрядов в дробной части длинной арифметики, целое четы-

рехбайтовое.

Для реализации длинного умножения пользователю надо вызвать подпро-

грамму ymnzn.

1.4 Операция деления

Длинное деление осуществляет подпрограмма delzn.for с учетом знаков веще-

ственных значений.

Непосредственное деление осуществляет подпрограмма deld, которая вызыва-

ется в подпрограмме delzn.

Вызов подпрограммы delzn:

call delzn(iz1, iz2, izrez, nc1, nd1, ic1, id1, nc2, nd2, ic2, id2, kcrez, kdrez, icrez, idrez,krazr), где:

iz1 - знак делимого, целое четырехбайтовое; iz2 – знак делителя, целое четырехбайтовое;

17

izrez – знак частного, целое четырехбайтовое;

nc1 – количество разрядов в целой части делимого, целое четырехбайтовое; nd1 – количество разрядов в дробной части делимого, целое четырехбайтовое; ic1 – массив значений разрядов в целой части делимого, целые четырехбайто-

вые;

id1 - массив значений разрядов в дробной части делимого, целые четырехбай-

товые;

nc2 – количество разрядов в целой части делителя, целое четырехбайтовое; nd2 - количество разрядов в дробной части делителя, целое четырехбайтовое; ic2 – массив значений разрядов в целой части делителя, целые четырехбайто-

вые;

id2 - массив значений разрядов в дробной части делителя, целые четырехбай-

товые;

kcrez - количество разрядов в целой части частного, целое четырехбайтовое; kdrez - количество разрядов в дробной части частного, целое четырехбайто-

вое;

icrez - массив значений разрядов в целой части частного, целые четырехбайто-

вые;

idrez - массив значений разрядов в дробной части частного, целые четырех-

байтовые;

krazr-количество разрядов в дробной части длинной арифметики, целое четы-

рехбайтовое.

Для реализации длинного деления пользователю надо вызвать подпрограмму

delzn.

1.5 Программная реализация длинной арифметики в «С++»

В случае реализации в «С++» имеем следующие внешние вызываемые функ-

ции:

delzn,deld,sl,slzn,wich,wiczn,ymnzn, ymn.

18

Функции delzn,deld, sl,slzn, wich, wiczn, ymnzn, ymn полностью аналогичны

подпрограммам под теми же именами в Фортране.

Список параметров внешних вызываемых функций delzn,deld,sl, slzn, wich,

wiczn,ymnzn,ymn полностью аналогичен списку параметров соответствующих подпрограмм в Фортране.

Но передача выходных параметров знак результата арифметической операции,

количество разрядов в целой части результата, количество разрядов в дробной части

результата арифметической операции идет по указателям..

Прототипы внешних вызываемых функций по реализации длинной арифмети-

ки: delzn, deld, slzn, sl, wiczn, wich, ymnzn, ymn.

Листинги внешних вызываемых функций:

void delzn(int za,int zb,int *pzc, long int n,long int nd,int *a,int *ad,

long int m,long int md,int *b,int *bd,

long int *pkcdel,long int *pkddel,int *cdel,int *ddel,long int krazr);

void deld(long int n, long int nd,int *a,int *ad, long int m,long int md,int *b,int *bd,

long int *pkcdel, long int *pkddel,int *cdel,int *ddel, long int krazr);

void slzn(int za,int zb,int *pzc, long int n, long int nd,int *a,int *ad,

long int m, long int md,int *b,int *bd,

long int *pkcel, long int *pkdro,int *rezc,int *rezdr, long int krazr);

void sl(long int n, long int nd,int *a,int *ad, long int m, long int md,int *b,int *bd,

long int *pkcel, long int *pkdro,int *rezc,int *rezdr, long int krazr); void wiczn(int za,int zb,int *pzc,

long int n,long int nd,int *a,int *ad, long int m, long int md,int *b,int *bd,

long int *pkcel, long int *pkdro,int *rezc,int *rezdr, long int krazr);

19

void wich(long int n, long int nd,int *a,int *ad,

long int m, long int md,int *b,int *bd,

long int *pkcel, long int *pkdro,int *rezc,int *rezdr, long int krazr); void ymnzn(int za,int zb,int *pzc,

long int n, long int nd,int *a,int *ad, long int m, long int md,int *b,int *bd,

long int *pkcel, long int *pkdro,int *ctot,int *cdtot, long int krazr); void ymn(long int n, long int nd,int *a,int *ad,

long int m, long int md,int *b,int *bd,

long int *pkcel, long int *pkdro,int *ctot,int *cdtot, long int krazr).

Во внешних вызываемых функциях delzn и deld:

рzc - указатель для знака частного;

pkcdel - указатель для количества разрядов в целой части частного; pkddel - указатель для количества разрядов в дробной части частного.

Во внешних вызываемых функциях slzn, sl, wiczn, wich, ymnzn, ymn:

рzc - указатель для знака результата суммирования,вычитания,умножения; pkcel - указатель для количества разрядов в целой части результата суммиро-

вания,вычитания,умножения;

pkdro - указатель для количества разрядов в дробной части результата сумми-

рования, вычитания, умножения.

Остальные параметры во внешних вызываемых функциях полностью анало-

гичны параметрам в соответствующих подпрограммах языка Фортран.

Элементы всех массивов - целые двухбайтовые.

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]