Статус документа
Статус документа

ГОСТ Р ИСО 10303-11-2009 Системы автоматизации производства и их интеграция. Представление данных об изделии и обмен этими данными. Часть 11. Методы описания. Справочное руководство по языку EXPRESS

     12.1 Арифметические операторы


Арифметическими операторами, которым требуется один операнд, являются тождество (+) и отрицание (-). Операнд должен иметь числовой тип (NUMBER, INTEGER или REAL). Результат оператора (+) равен операнду, результат оператора (-) имеет знак, противоположный знаку операнда. Если операнд имеет неопределенное (?) значение, то результат также будет иметь неопределенное (?) значение для обоих операторов.

Арифметическими операторами, которым требуются два операнда, являются сложение (+), вычитание (-), умножение (), деление (/), возведение в степень (**), целочисленное деление (DIV) и деление по модулю (MOD). Операнды должны иметь числовой тип (NUMBER, INTEGER или REAL).

Операторы сложения, вычитания, умножения, деления и возведения в степень выполняют одноименные математические операции. За исключением деления, они выдают целочисленный результат, если оба операнда имеют тип данных INTEGER, и результат типа REAL - в остальных случаях [если при этом ни один из операндов не имеет неопределенного (?) значения]. Результатом оператора деления (/) является действительное число [если при этом ни один из операндов не имеет неопределенного (?) значения].

Деление по модулю (MOD) и целочисленное деление (DIV) дают целочисленный результат [если при этом ни один из операндов не имеет неопределенного (?) значения]. Если какой-либо операнд имеет тип данных REAL, то перед выполнением данного оператора его значение преобразуется в значение типа INTEGER усечением, то есть его дробная часть отбрасывается. Для любых целых чисел а и b всегда справедливо равенство (a DIV b)b + c(a MOD b) = а, где c=1 для b>=0 и c=-1 для b<0. Абсолютное значение выражения a MOD b должно быть меньше, чем абсолютное значение b, а знак выражения a MOD b должен совпадать со знаком b.

Если какой-либо из операндов арифметического оператора имеет неопределенное (?) значение, то результат оператора должен иметь неопределенное (?) значение.

Округление действительных чисел.

Когда требуется округление, оно осуществляется с точностью р (либо заданной в явном виде для типа данных REAL, либо определяемой ограничением для конкретной реализации, устанавливаемым в соответствии с приложением Е) по следующему алгоритму:

a) преобразовать представление числа в экспоненциальный формат с удалением всех предшествующих нулей;

b) установить указатель разряда k на р-ю позицию справа от десятичной точки;

c) если действительное число является положительным, то выполняются следующие действия:

- если цифра, расположенная на позиции k, принадлежит к диапазону от 5 до 9, то добавить 1 к цифре, расположенной на позиции k-1, а цифры, начиная с позиции k и далее, отбросить. Перейти к шагу по перечислению e);

- если цифра, расположенная на позиции k, принадлежит к диапазону от 0 до 4, то цифры, начиная с позиции k и далее, отбросить. Перейти к шагу по перечислению h);

d) если действительное число является отрицательным, то выполняются следующие действия:

- если цифра, расположенная на позиции k, принадлежит к диапазону от 6 до 9, то добавить 1 к цифре, расположенной на позиции k-1, а цифры, начиная с позиции k и далее, отбросить. Перейти к шагу по перечислению e);

- если цифра, расположенная на позиции k, принадлежит к диапазону от 0 до 5, то цифры, начиная с позиции k и далее, отбросить. Перейти к шагу по перечислению h);

e) присвоить указателю разряда k значение k-1;

f) если цифра, расположенная на позиции k, принадлежит к диапазону от 0 до 9, то перейти к шагу по перечислению h);

g) если цифра, расположенная на позиции k, имеет значение 10, то добавить 1 к цифре, расположенной на позиции k-1, и установить цифру, расположенную на позиции k, в 0. Перейти к шагу по перечислению e);

h) округление действительного числа завершено.

Примечание - В результате действия данного алгоритма число 0,5 округляется до 1, а число -0,5 округляется до 0.


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

LOCAL

distance

: REAL(6);

x1, y1, z1

: REAL;

x2, y2, z2

: REAL;

END_LOCAL;
...
x1 := 0.; y1 := 0.;  z1 := 0.;
x2 := 10.; y2 := 11.; z2 := 12.;
...
distance := SQRT ( (x2-x1)
2 + (y2-y1)2 + (z2-z1)2)


Вычисленное значение объекта distance равно 1.9104973...e+1, но, его реальным значением будет 1.91050е+1, поскольку в спецификации данного объекта задана точность, равная шести значащим цифрам, поэтому будут оставлены только шесть значащих цифр.