Настоящий раздел определяет форму представления и правила вычисления арифметических выражений. Выражение формируется из операндов и знаков операций (см. п.10.3 об ограничениях на использование операндов в выражениях).
6.1. Арифметические выражения. Арифметическое выражение формируется из знаков арифметических операций и арифметических операндов. Как выражение, так и входящие в него операнды идентифицируют значения типа целый и вещественный. Знаки арифметических операций:
Знак операции | Представляемая операция | |||
+ | Сложение | |||
- | Вычитание | |||
* | Умножение | |||
/ | Деление | |||
** | Возведение в степень |
Арифметические операции сложения и вычитания могут быть одноместными и двухместными. В случае одноместных операций сложения и вычитания подразумеваемым первым арифметическим операндом является нуль.
Арифметические операнды - это первичное арифметическое выражение, множитель, терм, терм со знаком, простое арифметическое выражение и арифметическое выражение.
Первичное арифметическое выражение - это либо арифметическое выражение, взятое в скобки, либо константа, либо ссылка на переменную, либо ссылка на элемент массива, либо ссылка на функцию.
Множитель - это либо первичное арифметическое выражение, либо конструкция вида:
первичное арифметическое выражение
первичное арифметическое выражение
Терм - это либо множитель, либо конструкция одного из видов:
терм/множитель
или
терммножитель
Терм со знаком - это терм, которому непосредственно предшествует знак + или -.
Простое арифметическое выражение - это либо терм, либо два простые арифметические выражения, разделенные знаком + или -.
Арифметическое выражение - это либо простое арифметическое выражение, либо терм со знаком, либо одна из этих двух конструкций, за которой непосредственно следует знак + или -, за которым непосредственно следует простое арифметическое выражение.
Первичное арифметическое выражение любого типа может возводиться в степень, показателем которой является первичное арифметическое выражение типа целый; при этом получающийся в результате множитель имеет тот же тип, что и возводимое в степень первичное арифметическое выражение. Первичное арифметическое выражение типа вещественный может возводиться в степень, показателем которой является первичное арифметическое выражение типа вещественный; получающийся в результате множитель имеет тип вещественный. Во всех остальных случаях эффект выполнения операции возведения в степень не определен.
При использовании остальных арифметических операций любой допустимый операнд может сочетаться с любым допустимым операндом того же самого типа; получающийся в результате операнд имеет тот же самый тип.
6.2. Отношения - отсутствует; определение - по ГОСТ 23056-78.
6.3. Логические выражения - отсутствует; определение - по ГОСТ 23056-78.
6.4. Вычисление выражений. Часть выражения нуждается в вычислении только в том случае, если это необходимо для установления значения всего этого выражения. Правила формирования выражений определяют и порядок выполнения операций. Необходимо отметить, что вторым операндом операции вычитания является терм, непосредственно следующий за знаком этой операции. Вычисление выражения может производиться в соответствии с любой правильной последовательностью его формирования с учетом следующих ограничений.
Если два операнда соединены знаком операции, то порядок вычисления этих операндов произвольный. Если математическая операция коммутативна (или) ассоциативна, то это можно использовать для переупорядочивания операндов при условии сохранения целостности выражений в скобках. Значение множителя или терма типа целый - это ближайшее целое, не превосходящее математического значения, представленного этим множителем или термом. При вычислении термов типа целый, содержащих операцию деления, законы ассоциативности и коммутативности не используются, и, последовательно, вычисление таких термов должно производиться слева направо.
Любое использование имени элемента массива требует вычисления его индекса. Вычисление функции, входящей в выражение, не может изменить значения никакого другого операнда в выражении, операторе присваивания или операторе вызова подпрограммы, содержащих эту ссылку на функцию. Тип выражения, в котором встречается индекс или ссылка на функцию, не влияет (и на него не влияет) на вычисление фактических параметров или индекса.
Не может быть вычислен множитель, требующий возведения первичного арифметического выражения, значение которого отрицательно, в степень, показатель которой имеет тип вещественный. Не может быть вычислен множитель, требующий возведения первичного арифметического выражения, значение равно нулю, в степень, значение показателя которой также равно нулю.
Не может быть вычислен никакой операнд, значение которого математически не определено.