≪
≫

Арифметические модули

Численные методы предполагают оперирование не только с вещественными, но и с комплексными числами, а также с составленными из тех и других векторами и матрицами (см. [2], [3], [22] или [38]). Чтобы удовлетворить этим требованиям, PASCAL-XSC обеспечивает соответствующие типы необходимыми операциями и функциями.

Все арифметические операции имеют максимальную точность, как описано в разд. 1.3 или, для операций с данными типа real, в разд. 2.4.1.2. Точность получаемого результата не хуже 1 ulp.

PASCAL-XSC обеспечивает возможность построения выражений для дополнительных числовых типов:

complex

для комплексных чисел;

interval

для вещественных интервалов;

cinterval

для комплексных интервалов;

rvector

для вещественных векторов;

cvector

для комплексных векторов;

ivector

для интервальных векторов;

civector

для комплексных интервальных векторов;

rmatrix

для вещественных матриц;

cmatrix

для комплексных матриц;

irnatrix

для интервальных матриц;

cimatrix

для комплексных интервальных матриц.

Эта возможность не ограничена операндами одного типа. Допустимо использование почти любой операции, которая в математике обычно применяется для различных типов операндов. Таким образом, реально предусмотрено свыше 1000 арифметических операций. Кроме того, PASCAL-XSC позволяет пользователю создавать логические выражения с этими типами, предоставляя соответствующий набор операций, проверяющих отношения. Такое значительное число операций и функций дает возможность легко превращать инженерные и научные алгоритмы в четко структурированный программный код.

В большинстве случаев исходные математические формулы или алгоритмы могут, с очень незначительными изменениями, сразу использоваться в качестве частей программы, что обеспечивается совмещением операции присваивания :=.

В табл. 3.1 представлены предопределенные операции для арифметических типов.

Замечание. Клетка табл. 3.1, помеченная 2), содержит операции для операндов типов real и integer стандартного Паскаля. Операции * (скалярное произведение), +* (интервальная оболочка) и ** (пересечение интервалов) определяются в векторно-матричных и интервальных модулях соответственно.

В табл. 3.2 представлены операции отношения для арифметических типов, имеющихся в PASCAL-XSC. Большое число операций обеспечивается специальными арифметическими модулями, которые экспортируют перечисленные выше операции и набор предопределенных функций. Для типов complex, interval и cinterval этот набор содержит все математические функции, предусмотренные для типа real (см. разд. 2.4.1.2).

Так, предусмотрены следующие модули:

C_ARI

I_ARI

CI_ARI

MV_ARI MVC_ARI MVI_ARI M VC I _ ARI

комплексная арифметика;

интервальная арифметика;

комплексная интервальная арифметика;

вещественные матричная и векторная арифметики;

комплексные

матричная и векторная арифметики;

матричная и векторная арифметики; интервальные матричная и векторная

интервальные

комплексные

арифметики.

модулей описан в одном из следующих разделов. В них

Каждый из этих систематически описываются все типы, операции, функции преобразования, совмещения операции присваивания :=, предопределенные арифметические функции и процедуры ввода-вывода. Области определения и множества значений функций зависят процедур read и write, описанные цедур ввода-вывода в модулях, т. е. необязательным параметром-файлом

от реализации. Правила совмещения в разд. 2.7.11, применимы и для про-эти процедуры можно использовать с и с произвольным числом параметров

Левый операнд

Правый операнд

integer real complex

interval cinterval

rvector cvector

ivector civector

rmatrix cmatrix

imatrix cimatrix

г)

+»—

+ >—

+ ,-

integer real complex

2) o,o<,o>/ +*

+*

*,*<,*>

*

*,*<,*>

*

interval cinterval

+*

*

*

*

*

rvector cvector

Л Л -X- V V -x-

3) o, o<, o>/ +*

4)

+*

ivector civector

4)

+*

4)

+*, **

rmatrix cmatrix

Л Л

*

V V

  • *
  • *

* * A * V

*

3) o, o<, o>/ +*

4)

+*

imatrix cimatrix

*,/

*

*

4)

+*

4)

+*, **

  • 1) Операции в этом ряду — унарные (т. е. не имеющие левого операнда).
  • 2) о е {+,-,*,/}
  • 3) о G { + , —, *}, где * обозначает скалярное или матричное произведение.

) * обозначает скалярное или матричное произведение.

+* : интервальная оболочка (наименьший интервал, содержащий оба операнда).

** : пересечение интервалов.

Таблица 3.1. Предопределенные арифметические операции

ввода-вывода. Поэтому описание этих процедур ограничивается указанием возможных форматов ввода-вывода.

Сокращенные имена модулей выбраны с учетом максимально возможного (зависящего от реализации) числа символов в имени модуля, совпадающем с соответствующим именем файла. В некоторых системах существуют особые ограничения, касающиеся длины имени файла или длины имени точки входа, обрабатываемой компоновщиком, — поэтому с такими краткими именами модули можно использовать в любых системах.

Определение арифметических операций

Тип результата для скалярных арифметических операций определяется согласно нижеприводимой иерархии типов. Результат всегда принадлежит

Левый операнд

Правый операнд

integer real complex

interval cinterval

rvector cvector

ivector civector

rmatrix cmatrix

imatrix cimatrix

integer real complex

Л V A и" |Г II V Л

in

interval cinterval

ji

л V

V A II в J1 J1 Л V

V A V A^

rvector cvector

V Л II JI J1

V Л V

in

ivector civector

= , <>

V A II в J1 J1 Л V

V A V Aj_

rmatrix cmatrix

V Л II JI J1 A

V Л V

in

imatrix cimatrix

JI

A V

” V Л V A Л У. |P ii .2 II V A

) Операции <= и < обозначают отношения «подмножество слева»; >= и > обозначают отношения «подмножество справа».

>< : проверка интервалов на пустоту пересечения.

in : проверка принадлежности точки интервалу или проверка на строгое включение интервала интервалом.

Таблица 3.2. Предопределенные операции отношения

к самому низко расположенному типу, содержащему типы обоих операн

дов.

Для векторно-матричных структурой операндов (здесь

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

s =

скаляр, v

= вектор, m =

матрица):

V

+

v = v,

V

*

v =

s,

m

+

m = m,

s

*

V =

V,

V

*

s =

V,

V

—

V = V,

m

*

V =

V,

m

—

m = m.

s

*

m =

m,

V

/

s = V,

m

*

s =

m,

m

/

s = m,

m

*

m =

m.

Тип результата устанавливается в соответствии с приведенной выше иерархией типов с учетом типов каждой из двух компонент.

Для векторно-матричных операций предполагается, что соответствующие диапазоны изменения индексов должны иметь одинаковую длину. Сами же диапазоны изменения индексов могут быть различными, например:

var

р : complex;

а : rvector[1..10];

b : cvectorfl 1..20];

р а * Ь;

В последующих разделах при определении операций предполагается, что диапазоны изменения индексов совпадают. Например, скалярное произведение р = а * Ь, описывается как

#* ( for i := lb(a) to ub(a) sum (a[i] * b[i]) )

а реализуется как

#* ( for i := lb(a) to ub(a) sum

(a[i] * b[i + lb(b) - lb(a)]) )

Определение операций отношения

Операции отношения в этих модулях основываются на операциях сравнения для типа real. Они используются при определении операций <— и = для типа структурированных числовых данных — SNDT (Structured Numerical Data Туре). Операция = реализована так, чтобы ее результатом было значение true тогда и только тогда, когда все компоненты SNDT удовлетворяют равенству. Определение операции <— в зависимости от типов операндов поясняется в соответствующем разделе при описании модулей. Все остальные операции отношения для элементов а, Ь, где а, Ь 6 SNDT, определяются следующим образом:

(RD)

а О b

а < b

а > b

а >= b

not (а = Ь), (а <= b) and (а b < а, b <= а.

Ь),

Совмещение операции присваивания

Операция присваивания совмещается, чтобы обеспечить возможность преобразования между несколькими основными типами и, отчасти, обеспечить инициализацию для массивов. Все преобразования типов определяются в соответствии с математической вложенностью (например, вещественные числа вложены в комплексные), т. е. значение остается без изменения. Инициализация через присвоение значения скалярного типа переменной векторного или матричного типа определяется покомпонентно, т. е. одно и то же значение присваивается всем компонентам массива. Для всех этих совмещенных операций присваивания не существует погрешностей округления или преобразования.

Тем не менее, в связи с литеральными константами в правой части оператора присваивания необходимо помнить про особые проблемы, связанные с преобразованием: по причинам, указанным в разд. 2.3.1, вещественная константа преобразуется во внутренний real-формат до выполнения операции присваивания.

Точность предопределенных функций

Все комплексные функции выдают результат с точностью не хуже 1 ulp.

Интервальные функции всегда вычисляют интервал чисел с плавающей точкой, который содержит точный интервальный результат. В большинстве случаев вычисляется наименьший включающий интервал, но существуют некоторые особые случаи, при которых вычисленные границы отличаются от точных на 2 ulp.

В комплексных интервальных функциях обеспечивается одинаковая точность для вещественных и мнимых составляющих.

 
Посмотреть оригинал