指数函数和对数函数

在 MQL5 中,可通过相应的 API 部分实现指数函数和对数函数的计算。

API 中缺少二进制对数,而计算机科学和组合数学中通常需要二进制对数,但这并不是问题,因为在需要时,可以通过可用的自然对数或十进制对数函数轻松计算。

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

其中 loglog10 是可用的对数函数(分别以 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)

该函数返回提升到指定次幂 value 的指数,即数字 e(作为预定义常量 M_E 可用)。溢出时,函数返回 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