MathExpm1

Restituisce il valore dell'espressione MathExp(x)-1.

double  MathExpm1(
   double  value      // potenza per il numero e
   );

Parametri

value

[in] Il numero che specifica la potenza.

Valore Restituito

Un valore di tipo double. In caso di overflow, la funzione restituisce INF (infinito), in caso di underflow MathExpm1 restituisce 0.

Nota

Ai valori di x vicino a 0, la funzione MathExpm1(x) genera valori molto più accurati della funzione MathExp(x)-1.

Invece della funzione MathExpm1() è possibile utilizzare la funzione expm1().

 

Esempio:

#define GRAPH_WIDTH  750
#define GRAPH_HEIGHT 350
 
#include <Graphics\Graphic.mqh>
 
CGraphic ExtGraph;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- ottenere 9 valori da 0 a 8 con il passo 1
   vector X(9,VectorArange);
   Print("vector X = \n",X);
//-- calcolare la ("e" (numero di Eulero) alla potenza di ogni valore vettoriale di X) - 1
   X=MathExpm1(X);
   Print("MathExpm1(X) = \n",X);
   
//--- trasferire i valori calcolati dal vettore all'array
   double y_array[];
   X.Swap(y_array);
 
//--- traccia un grafico dei valori vettoriali calcolati
   CurvePlot(y_array,clrDodgerBlue);
 
//--- attendere di aver premuto i tasti Escape o PgDn per eliminare il grafico (prendere uno screenshot) ed uscire
   while(!IsStopped())
     {
      if(StopKeyPressed())
         break;
      Sleep(16);
     }
 
//--- pulire
   ExtGraph.Destroy();
  }
//+-------------------------------------------------------------------------------+
//| Riempire un vettore con 'valori' con incremento di 'passo'                    |
//+-------------------------------------------------------------------------------+
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
  }
//+-----------------------------------------------------------------------------------------------------------+
//| Quando si preme ESC, restituire 'true'                                                                    |
//| Quando si preme PgDn, prendere uno screenshot del grafico e restituire 'true'                             |
//| Altrimenti restituire 'false'                                                                             |
//+-----------------------------------------------------------------------------------------------------------+
bool StopKeyPressed()
  {
//--- se viene premuto ESC, restituisce 'true'
   if(TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE)!=0)
      return(true);
//--- se PgDn viene premuto e uno screenshot del grafico viene preso correttamente, restituisce 'true'
   if(TerminalInfoInteger(TERMINAL_KEYSTATE_PAGEDOWN)!=0 && MakeAndSaveScreenshot(MQLInfoString(MQL_PROGRAM_NAME)+"_Screenshot"))
      return(true);
//--- restituisce 'false'
   return(false);
  }
//+------------------------------------------------------------------+
//| Crea un oggetto grafico e disegna 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();
  }
//+------------------------------------------------------------------+
//| Fa uno screenshot e salva l'immagine in un file                  |
//+------------------------------------------------------------------+
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);
  }

 

Risultato:

MathExpm1_Screenshot

Vedere anche

Tipi reali (double, float)