Порядок вычисления математических выражений
Встроенные математические функции
Программы с численными расчетами как правило предполагают использование различных математических функций, таких как вычисление корня, тригонометрические функции и т.д. Для наиболее часто встречающихся математических функций в алгоритмический язык как правило включаются встроенные подпрограммы для вычисления этих функций. В табл. 3 приведен перечень математических функций, реализованных в VBA. В этой таблице X означает любое численное выражение; все аргументы функций являются обязательными, если только не указано иначе.
Таблица 3. Встроенные математические функции VBA
| Функции (аргументы) | Возвращает / действие |
| Abs(X) | Возвращает абсолютное значение X |
| Atn(X) | Возвращает арктангенс X как угол в радианах |
| Сos(X) | Косинус угла X, где X это угол, измеряемый в радианах |
| Sin(X) | Возвращает синус угла; X – это угол, измеряемый в радианах |
| Sqr(X) | Возвращает корень квадратный из X. VBA отображает ошибку, исполнения, если X – отрицательное |
| Tan(X) | Возвращает тангенс угла; X – угол в радианах |
| Exp(X) | Возвращает экспоненту – константу е, возведенную в степень х. (е – это основание натурального логарифма) |
| Fix(X) | Возвращает целую часть X. Fix не округляет число, а отбрасывает любую дробную часть. Если X является отрицательным, Fix возвращает ближайшее отрицательное целое, большее, чем или равное X |
| Int(X) | Возвращает целую часть X. Int не округляет число, а отбрасывает любую дробную часть. Если X является отрицательным, Int возвращает ближайшее отрицательное целое меньшее, чем или равное X |
| Log(X) | Возвращает натуральный логарифм X |
| Rnd(X) | Возвращает случайное число; аргумент является необязательным. Функцию Rnd используется только после инициализации VBA-генератора случайных чисел оператором Randomize |
| Sgn(X) | Возвращает знак числа: –1, если X отрицательное; 1, если X положительное; 0, если X равно 0 |
Математические выражения в широком смысле – это выражения или формулы, в которых могут присутствовать операции вычисления арифметических, алгебраических, тригонометрических и других математических выражений, а также логические операции сравнения (больше, меньше и т.п.). Все математические выражения состоят из одной или более следующих частей:
– константы;
– переменные (в том числе элементы массива);
– знаки математических операций;
– функции.
Выражения используются для выполнения непосредственно математических вычислений, но и для выполнения логических операций сравнения. Вычисленные выражения, так же как и переменные, имеют один из типов данных Visual Basic.
При вычислении сложных выражений VBA следует таким правилам:
– все операции выполняются последовательно;
– части выражения, заключенные в круглые скобки, всегда вычисляются в первую очередь. Если выражение, заключенное в круглые скобки, является частью другого сложного выражения, также заключенного в круглые скобки, VBA применяет эти же правила последовательно от внутренних выражений в круглых скобках к внешним;
– конкретные операции выполняются в зависимости от иерархии операторов (см. табл. 4); если операторы имеют равный уровень приоритета, они вычисляются в порядке слева направо;
– если в выражении присутствуют арифметические и логические операции, то сначала выполняются арифметические, и только потом логические.
В табл. 4 приведена иерархия последовательности выполнения математических операций VBA. Все операции перечислены в порядке убывания приоритетов от самого высокого до самого низкого. Операции, помещенные в одной и той же строке таблицы, имеют равный приоритет.
Таблица 4. Иерархия операторов/операций
| Оператор/ операция | Комментарии |
| ^ | Возведение в степень, наивысший приоритет |
| - | Унарный минус (присвоение знака числу) |
| *, / | Умножение и деление имеют равные приоритеты; они вычисляются по мере появления в выражении слева направо |
| \ | Вычисляет результат целочисленного деления первого математического выражения (X) на второе (Y). Перед вычислением значение каждого выражения округляется до целых по правилам математики. |
| +, - | Сложение и вычитание имеют равный приоритет; они вычисляются по мере появления в выражении слева направо |
| & | Сложение строк выполняется после любых арифметических операций в выражении и перед любыми операциями сравнения или логическими операциями |
| <, <=, >, >=, =, <> | Все операторы сравнения имеют равные приоритеты и вычисляются по мере появления в выражении слева направо. Для группирования операторов сравнения в выражениях надо использовать круглые скобки |
| Not | Логическое отрицание |
| And | Функция И (логическое умножение) |
| Or | Функция ИЛИ (Логическое сложение) |
| Xor | Исключающее ИЛИ |
| Eqv | Функция эквивалентности |
| Imp | Функция импликации |