Программная реализация численных методов в длинной арифметике. Монография
.pdf11.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
