MathExpm1

Devuelve el valor de la expresión MathExp(x)-1.

double  MathExpm1(
   double  value      // exponente para el número e
   );

Parámetros

value

[in]  Número que define el exponente.

Valor devuelto

Número del tipo double. En caso de sobrecarga, la función devuelve INF (infinito), en caso de pérdida en el grado de precisión, MathExpm1 devuelve 0.

Nota

Con valores x cercanos a 0, la función MathExpm1(x) da valores mucho más precisos que MathExp(x)-1.

En lugar de la función MathExpm1(), se puede usar la función expm1().

 

Ejemplo:

#define GRAPH_WIDTH  750
#define GRAPH_HEIGHT 350
 
#include <Graphics\Graphic.mqh>
 
CGraphic ExtGraph;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- obtenemos 9 valores de 0 a 8 con paso 1
   vector X(9,VectorArange);
   Print("vector X = \n",X);
//--- calculamos el valor ("e" (número de Euler) en el grado de cada valor del vector X) - 1
   X=MathExpm1(X);
   Print("MathExpm1(X) = \n",X);
   
//--- transferimos los valores calculados de vector a array
   double y_array[];
   X.Swap(y_array);
 
//--- dibujamos el gráfico de los valores calculados del vector
   CurvePlot(y_array,clrDodgerBlue);
 
//--- esperamos la pulsación de Escape o PgDn para eliminar el gráfico (crear una captura de pantalla) y finalizar el funcionamiento
   while(!IsStopped())
     {
      if(StopKeyPressed())
         break;
      Sleep(16);
     }
 
//--- limpiamos
   ExtGraph.Destroy();
  }
//+------------------------------------------------------------------+
//| Rellena el vector con el valor value con el incremento step      |
//+------------------------------------------------------------------+
template<typename T
void VectorArange(vector<T> &vec,T value=0.0,T step=1.0
  { 
   for(ulong i=0i<vec.Size(); i++,value+=step
      vec[i]=value
  }
//+------------------------------------------------------------------+
//| Al pulsar ESC, retorna true                                      |
//| Al pulsar PgDn hace una captura del gráfico y retorna true       |
//| Si no, retorna false                                             |
//+------------------------------------------------------------------+
bool StopKeyPressed()
  {
//--- si ESC está pulsado, retornamos true
   if(TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE)!=0)
      return(true);
//--- si PgDn está pulsado y se realiza correctamente la captura de pantalla, retornamos true
   if(TerminalInfoInteger(TERMINAL_KEYSTATE_PAGEDOWN)!=0 && MakeAndSaveScreenshot(MQLInfoString(MQL_PROGRAM_NAME)+"_Screenshot"))
      return(true);
//--- retornamos false
   return(false);
  }
//+------------------------------------------------------------------+
//| Crea un objeto de gráfico y dibuja una curva                     |
//+------------------------------------------------------------------+
void CurvePlot(double &x_array[], double &y_array[], const color colour)
  {
   ExtGraph.Create(ChartID(), "Graphic"000GRAPH_WIDTHGRAPH_HEIGHT);
   ExtGraph.CurveAdd(x_arrayy_arrayColorToARGB(colour), CURVE_LINES);
   ExtGraph.IndentUp(30);
   ExtGraph.CurvePlotAll();
   string text1="Press ESC to delete the graph and stop the script, or";
   string text2="Press PgDn to create a screen, delete the graph and stop the script";
   ExtGraph.TextAdd(549text1ColorToARGB(clrBlack));
   ExtGraph.TextAdd(54,21text2ColorToARGB(clrBlack));
   ExtGraph.Update();
  }
//+------------------------------------------------------------------+
//| Crea una captura de pantalla y guarda la imagen en un archivo    |
//+------------------------------------------------------------------+
bool MakeAndSaveScreenshot(const string file_name)
  {
   string file_names[];
   ResetLastError();
   int selected=FileSelectDialog("Save Picture"NULL"All files (*.*)|*.*"FSD_WRITE_FILEfile_namesfile_name+".png");
   if(selected<1)
     {
      if(selected<0)
         PrintFormat("%s: FileSelectDialog() function returned error %d"__FUNCTION__GetLastError());
      return false;
     }
   
   bool res=false;
   if(ChartSetInteger(0,CHART_SHOW,false))
      res=ChartScreenShot(0file_names[0], GRAPH_WIDTHGRAPH_HEIGHT);
   ChartSetInteger(0,CHART_SHOW,true);
   return(res);
  }

 

Resultado:

MathExpm1_Screenshot

Vea también

Tipos reales (double, float), Estadística, Gráficos científicos, Estado del terminal de cliente