指数函数和对数函数
在 MQL5 中,可通过相应的 API 部分实现指数函数和对数函数的计算。
API 中缺少二进制对数,而计算机科学和组合数学中通常需要二进制对数,但这并不是问题,因为在需要时,可以通过可用的自然对数或十进制对数函数轻松计算。
log2(x) = log(x) / log(2) = log(x) / M_LN2
|
其中 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)
该函数返回提升到指定次幂 value 的指数,即数字 e(作为预定义常量 M_E 可用)。溢出时,函数返回 inf(一种表示无穷大的 NaN)。
PRT(MathExp(0.5)); // 1.648721270700128
|
double MathLog(double value) ≡ double log(double value)
该函数返回传递数字的自然对数。如果 value 为负,则函数返回 -nan(ind)(NaN“未定义值”)。如果 value 为 0,则函数返回 inf(NaN“无穷大”)。
PRT(MathLog(M_E)); // 1.0
|
最后一行通过 MathLog 使用二进制对数的实现:
double Log2(double value)
|
double MathLog10(double value) ≡ double log10(double value)
该函数返回数字的十进制对数。
PRT(MathLog10(10.0)); // 1.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 |