Поддерживаемые функции

  Расширены возможности вычислений введением дополнительных функций и поддержкой обращения к элементам массивов, матриц, и к функциональным блокам. Пример: %1+2*sh(%2(3)) - первый аргумент делает вызов с точки X1, отправляя наверх данные типа NULL (т.е. ничего); второй же аргумент отправляет наверх данные (3.0) типа real и получает результат работы функционального блока, подключенного к этой точке (а он уже и используется в вычислениях). Таким функциональным блоком может быть такой же MathParse со своей формулой и подключенный к точке reCalc, либо целая схема на HiAsm. Синтаксис использования массивов и матриц аналогичен, но использует квадратные скобки: %5[2] – второй элемент массива, подключенного к точке 5; %1[%2*4, %3+1] – соответствующий элемент матрицы, подключенной к точке 1. Понятно, что в качестве аргументов функционального вызова могут стоять поноценные выражения.

  Поддержана возможность итеративных вычислений без внешнего элемента Memory. Можно в формуле обратиться к результату предыдущих вычислений (%0) и сбросить значение результата (перед началом операций) методом doClear в значение, определяемое свойством Default.

 Возможно проведение нового вычисления по запросу на нижнюю точку reCalc. При этом данные, поступившие снизу выполняют роль данных из потока при запуске вычислений методом doCalc. В общем MathParse-ы можно вертикально каскадировать, причем верхний MathParse будет вызываться нижним сколько раз, сколько потребуется в формуле. 

 При ошибках в вычислении, кроме ее типа (Синтаксис, Вычисления), доступна позиция в исходной строке, на которой анализатор элемента отказался продолжать. Это можно прочитать с нижней точки PosErr. Следует отметить, что при наличии ошибки, событие onResult не генерируется, но onError - обязательно. После ошибки - с нижней точки Result читается NULL, а при отсутствии ошибки в предыдущем вычислении - с нижней точки PosErr читается -1 (несуществующая позиция в строке). Метод doClear сбрасывает состояние ошибки. Метод doCalc (как и reCalc) после ошибки автоматически делает doClear.

  Внимание! Изменился порядок вызова верхних точек. Теперь он определяется только только формулой MathStr. При этом, если какой-то аргумент вызывался один раз, и он не является функциональным, то вызов производится только один раз. Это же касается и данных из потока, которые используются в качестве первого же аргумента, у которого верхняя точка свободна. Ну а функциональные вызовы (как и вызовы матриц и массивов) осуществляются столько раз, сколько встречаются в формуле. Поскольку это могут быть, например, элементы массива от разных значений индекса. Пример, демонстрирующий порядок вызова аргументов: Хотим посчитать биномальный коэффициент N!/K!/(N-K)! Для этого, например, подключаем к точке X1 - значение N, к точке X2 - значение K, а к точке X3 - функциональный блок, вычисляющий факториал. Записываем формулу: %3(%1)/%3(%2)/%3(%1-%2) При вычислении, обращения будут происходить в следующей последовательности (читайте строку слева направо): [точка X1] => [точка X3 с соответствующим аргументом] => [точка X2] => [точка X3 с соответствующим аргументом] => [точка X3 с нужным аргументом, значения с X1 и X2 уже известны]. В общем, поскольку порядок определяется формулой, которую задал все-таки пользователь, есть надежда, что это приемлимый вариант. 

 Свойство AngleMode, определяющее единицы для тригонометрических функций.

 Компонент "Продвинутая математика" осуществляет разбор математического выражения из параметра MathStr и предоставляет доступ пользователя к следующим встроенным функциям и переменным:

Имя в маске описание ф-ции
x + y сложение
x - y вычитание
x * y умножение
x / y деление
x ^ y возведение в степень
x div y целочисленое деление(извлечение целой части)
x mod y остаток от деления
cos(x) косинус угла в радианах
sin(x) синус угла в радианах
tg(x) тангес угла в радианах
ctg(x) котангес угла в радианах
arccos(x) арккосинус
arcsin(x) арксинус
ln(x) натуральный логарифм числа
sqrt(x) квадратный корень числа
atan(y,x) угол, определяемый точкой с координатами (x,y)
ch(x) гиперболический косинус (exp(x)+exp(-x))/2
sh(x) гиперболический синус (exp(x)-exp(-x))/2
th(x) sh(x)/ch(x)
cth(x) ch(x)/sh(x)
arcch(x) обратная ch(x)
arcsh(x) обратная sh(x)
arcth(x) обратная th(x)
arccth(x) обратная cth(x)
log(n,x) логорифм от x по основанию: n ln(x)/ln(n)
lg(x) десятичный логорифм ln(x)/ln(10)
exp(x) экспонента: e^x
sqr(x) просто квадрат: x*x
abs(x) абсолютная величина числа
sign(x) знак числа, принимает соответственно значения -1,0,+1
round(x[,y=1]) округление, round(x,y)=y*round(x/y)
frac(x[,y=1]) дробная часть, frac(x,y)=y*frac(x/y)
trunc(x[,y]) отбрасывание дробной, trunc(x,y)=y*trunc(x/y)
min(x[,y,...]) находим минимум от всех аргументов
max(x[,y,...]) находим максимум от всех аргументов
pi возвращает число ПИ = 3.1415....
e возвращает число e = 2.7182....
x < y принимает значения 1, если выполняется условие, иначе - 0
x > y принимает значения 1, если выполняется условие, иначе - 0
x <= y принимает значения 1, если выполняется условие, иначе - 0
x >= y принимает значения 1, если выполняется условие, иначе - 0
x = y принимает значения 1, если выполняется условие, иначе - 0
x and y принимает значения 1, если x <> 0 и y <> 0, иначе - 0
x or y принимает значения 1, если x <> 0 или y <> 0, иначе - 0
x xor y принимает значения 1, если x = 0 и y <> 0 или x <> 0 и y = 0, иначе - 0

 Примеры: Draw, Calk