Выражения, используемые в модуле «арифметика над данными», формулах величин зёрен и в аппроксимирующих функциях графиков, имеют синтаксис подобный многим языкам программирования.
Все числа являются действительными (с плавающей точкой), числовые константы используют стандартную нотацию. Примеры правильных чисел: 1
, .707
, 2.661
, 8.2e-34
.
Имена функций, постоянных и переменных начинаются с буквы и продолжаются нулём или более букв, цифр и знаков подчёркивания. Примеры правильных идентификаторов: pow10
(функция), Pi
(постоянная), d2_2
(переменная).
Приоритет операций сведён в нижеприведённую таблицу.
Операция | Ассоциативность | Примеры |
---|---|---|
скобки | недоступно | (x) |
вызовы функций и унарные операторы | справа налево | -sqrt 3 |
оператор степени | справа налево | 2^16 |
операторы умножения, деления, остатка от деления | слева направо | 9/2 * 8 |
операторы сложения и вычитания | слева направо | 3 - 4 + 5 |
Следует заметить, что -3^2
равно 9, и равносильно (-3)^2
, как в bc, но в отличие от Perl или Python.
Доступные операторы и функции сведены в нижеследующую таблицу.
Оператор | Смысл |
---|---|
+ (унарный) | нет операции |
- (унарный) | отрицательное значение |
~ | отрицательное значение (эквивалентно - ) |
+ (бинарный) | сложение |
- (бинарный) | вычитание |
* | умножение |
/ | деление |
% | остаток с плавающей точкой |
^ | степень |
abs | модуль |
floor | округление вниз к ближайшему целому (отбрасывание дробной части) |
ceil | округление вверх до ближайшего целого (следующего после вещественного) |
sqrt | квадратный корень |
cbrt | корень кубический |
sin | функция синуса |
cos | функция косинуса |
tan | функция тангенса |
asin | функция арксинуса |
acos | функция арккосинуса |
atan | функция арктангенса |
sinc | функция "кардинальный синус", синус делённый на значение |
exp | функция экспоненты по основанию e |
ln | функция логарифма по основанию e |
log | функция логарифма по основанию e |
pow10 | степенная функция по основанию 10 |
log10 | функция логарифма по основанию 10 |
pow2 | функция экспоненты по основанию 2 |
log2 | функция логарифма по основанию 2 |
spow | функция степени со знаком; результат будет иметь тот же знак, что и аргумент |
sinh | функция гиперболического синуса |
cosh | функция гиперболического косинуса |
tanh | функция гиперболического тангенса |
asinh | инверсия функции гиперболического синуса |
acosh | инверсия функции гиперболического косинуса |
atanh | инверсия функции гиперболического тангенса |
pow | функция степени, pow(x,y) соответствует x^y |
min | минимум двух значений |
max | максимум двух значений |
step | нуль для отрицательных чисел или нуля, один для положительных значений |
mod | остаток от деления с плавающей точкой, mod(x,y) эквивалентен x % y |
hypot | Эвклидова функция расстояния, hypot(x,y) соответствует sqrt(x^2+y^2) |
atan2 | функция арктангенса двух переменных |
Следующие функции будут доступны если системная математическая библиотека их содержит:
Оператор | Смысл |
---|---|
erf | функция ошибки (интеграл гауссовой функции от нуля) |
erfc | дополнительная функция ошибки (интеграл гауссовой функции до бесконечности) |
lGamma | логарифм функции Γ |
Gamma | функция Γ |
J0 | функция Бесселя первого рода порядка 0 |
J1 | функция Бесселя первого рода порядка 1 |
Y0 | функция Бесселя второго рода порядка 0 |
Y1 | функция Бесселя второго рода порядка 1 |
Помимо этого, есть несколько особенностей, которые упрощают набор простых выражений:
Знака умножения являются опциональными, вместо них можно использовать пробелы (или в некоторых случаях ничего не ставить). Например, 3/4 Pi
и 5(4+3)(2+1)
будут правильными выражениями. Однако, 3a
не будет, 3e-4
всегда обозначает 0.0003
, а не 3*e - 4
.
Между вызовом функций и унарными операторами нет отличий, поэтому скобки нередко могут опускаться. Например, sqrt 5
и hypot hypot 3,4,5
будут правильными выражениями. Последнее можно расписать со скобками следующим образом: hypot(hypot(3,4),5)
.
Следует однако отметить, что вызов функции имеет больший приоритет, чем любой другой оператор, поэтому sin Pi/2
будет эквивалентом (sin Pi)/2
, а не sin(Pi/2)
.
Если сомневаетесь, то пишите выражения в их полной форме.