Funciones exponenciales y logarítmicas

El cálculo de funciones exponenciales y logarítmicas está disponible en MQL5 utilizando la sección correspondiente de la API.

La ausencia del logaritmo binario en la API, que suele ser necesario en informática y combinatoria, no supone ningún problema, ya que es fácil de calcular, previa solicitud, mediante las funciones de logaritmo natural o decimal disponibles.

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

Aquí, log y log10 son funciones logarítmicas disponibles (basadas en e y 10, respectivamente), M_LN2 es una constante integrada igual a log(2).

La siguiente tabla enumera todas las constantes que pueden ser útiles en los cálculos logarítmicos.

Constante

Descripción

Valor

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

En el archivo MathExp.mq5 se recogen ejemplos de las funciones que se describen a continuación.

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

La función devuelve el exponente, es decir, el número e (disponible como constante predefinida M_E) elevado a la potencia especificada value. En caso de desbordamiento, la función devuelve inf (una especie de NaN para el infinito).

   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)

La función devuelve el logaritmo natural del número introducido. Si value es negativo, la función devuelve -nan(ind) (NaN «valor indefinido»). Si value es 0, la función devuelve inf (NaN «infinito»).

   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

La última línea utiliza la implementación del logaritmo binario a través de MathLog:

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

 

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

La función devuelve el logaritmo decimal de un número.

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

 

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

La función devuelve el valor de la expresión (MathExp(value) - 1). En cálculos económicos, la función se utiliza para calcular el interés efectivo (ingreso o pago) por unidad de tiempo en un esquema de interés compuesto cuando el número de periodos tiende a infinito.

   PRT(MathExpm1(0.1)); // 0.1051709180756476

 

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

La función devuelve el valor de la expresión MathLog(1 + value), es decir, realiza la acción contraria a la función MathExpm1.

   PRT(MathLog1p(0.1)); // 0.09531017980432487