- Абсолютное значение числа
- Максимальное и минимальное из двух чисел
- Функции округления
- Деление чисел по модулю
- Степени и корни
- Показательные и логарифмические функции
- Тригонометрические функции
- Гиперболические функции
- Проверка вещественных чисел на нормальность
- Генерация случайных чисел
- Управление порядком байтов в целых числах
Абсолютное значение числа
В MQL5 API имеется функция MathAbs, позволяющая убрать у числа знак минус, если он есть. Она избавляет нас от ручного кодирования более длинных эквивалентов, например, такого:
if(x < 0) x = -x; |
numeric MathAbs(numeric value) ≡ numeric fabs(numeric value)
Функция возвращает абсолютное значение переданного ей числа, то есть его модуль. Аргументом может быть число любого типа. Иными словами, функция перегружена для char/uchar, short/ushort, int/uint, long/ulong, float и double, хотя для беззнаковых типов — значения и так всегда неотрицательные.
При передаче строки, она будет неявно преобразована в число double, о чем компилятор выдаст предупреждение.
Тип возвращаемого значения всегда совпадает с типом аргумента и потому компилятору может потребоваться выполнить приведение к типу приемной переменной, если типы отличаются.
Примеры использования функции приведены в файле MathAbs.mq5.
void OnStart()
|
Важно отметить, что приведение знакового целого к беззнаковому не эквивалентно получению модуля числа:
uint u_cast = i;
|
Также обратите внимание, что число 0 может иметь знак:
...
|
Наиболее показательным примером использования MathAbs является проверка двух вещественных чисел на равенство. Как известно, вещественные числа имеют ограниченную точность представления значений, которая может дополнительно деградировать в ходе длительных вычислений (например, сумма десяти значений 0.1 не дает в точности 1.0). Строгое условие value1 == value2 может давать false в большинстве случаев, когда чисто умозрительно должно бы выполняться равенство.
Поэтому для сравнения вещественных величин обычно используют запись:
MathAbs(value1 - value2) < EPS |
где EPS — некое малое положительное значение, заданная точность (см. пример в разделе Операции сравнения).