Показательные и логарифмические функции

Вычисление показательных и логарифмических функций доступно в MQL5 с помощью соответствующего раздела API.

Отсутствие среди API двоичного логарифма, который часто требуется в информатике и комбинаторике, не является проблемой, поскольку его легко вычислить, на выбор, через имеющиеся функции натурального или десятичного логарифма.

log2(x) = log(x) / log(2) = log(x) / M_LN2
log2(x) = log10(x) / log10(2)

Здесь log и log10 — имеющиеся функции логарифмов (по основанию e и 10, соответственно), M_LN2 — встроенная константа, равная log(2).

В следующей таблице перечислены все константы, могущие быть полезными при логарифмических вычислениях.

Константа

Описание

Значение

M_E

e

2.71828182845904523536

M_LOG2E

log2(e)

1.44269504088896340736

M_LOG10E

log10(e)

0.434294481903251827651

M_LN2

ln(2)

0.693147180559945309417

M_LN10

ln(10)

2.30258509299404568402

Примеры описываемых далее функций собраны в файле MathExp.mq5.

double MathExp(double value) ≡ double exp(double value)

Функция возвращает экспоненту, то есть число e (доступно как предопределенная константа M_E), возведенное в указанную степень value. При переполнении функция возвращает inf (разновидность NaN для бесконечности).

   PRT(MathExp(0.5));      // 1.648721270700128
   PRT(MathPow(M_E0.5)); // 1.648721270700128
   PRT(MathExp(10000.0));  // inf, NaN

 

double MathLog(double value) ≡ double log(double value)

Функция возвращает натуральный логарифм переданного числа. Если значение value отрицательно, функция возвращает -nan(ind) (NaN "неопределенное значение"). Если value равно 0, функция возвращает inf (NaN "бесконечность").

   PRT(MathLog(M_E));     // 1.0
   PRT(MathLog(10000.0)); // 9.210340371976184
   PRT(MathLog(0.5));     // -0.6931471805599453
   PRT(MathLog(0.0));     // -inf, NaN
   PRT(MathLog(-0.5));    // -nan(ind)
   PRT(Log2(128));        // 7

В последней строке использована реализация двоичного логарифма через MathLog:

double Log2(double value)
{
   return MathLog(value) / M_LN2;
}

 

double MathLog10(double value) ≡ double log10(double value)

Функция возвращает десятичный логарифм числа.

   PRT(MathLog10(10.0)); // 1.0
   PRT(MathLog10(10000.0)); // 4.0

 

double MathExpm1(double value) ≡ double expm1(double value)

Функция возвращает значение выражения (MathExp(value) - 1). В экономических расчетах функция используется для вычисления эффективного процента (дохода или платежа) в единицу времени в схеме сложных процентов, когда количество периодов стремится к бесконечности.

   PRT(MathExpm1(0.1)); // 0.1051709180756476

 

double MathLog1p(double value) ≡ double log1p(double value)

Функция возвращает значение выражения MathLog(1 + value), то есть производит обратное действие к функции MathExpm1.

   PRT(MathLog1p(0.1)); // 0.09531017980432487