MathLog

Retourne le logarithme naturel.

double  MathLog(
   double  val      // nombre pour calculer le logarithme
   );

Paramètres

val

[in]  La valeur dont le logarithme doit être calculé.

Valeur de Retour

Le logarithme naturel est val en cas du succès. Si la valeur val est negative, la fonction retourne NaN (une valeur indéterminée). Si val est égal au 0, la fonction retourne INF (infini).

Note

On peut utiliser la fonction log() au lieu de la fonction MathLog().

 

Exemple :

#define GRAPH_WIDTH  750
#define GRAPH_HEIGHT 350
 
#include <Graphics\Graphic.mqh>
 
CGraphic ExtGraph;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- prends 9 valeurs, de 0 à 8, avec un pas de 1
   vector X(9,VectorArange);
   Print("vector X = \n",X);
//--- calcule le logarithme pour chaque valeur du vecteur X
   X=MathLog(X);
   Print("MathLog(X) = \n",X);
   
//--- transfére les valeurs calculées du vecteur vers le tableau
   double y_array[];
   X.Swap(y_array);
 
//--- dessine un graphique des valeurs vectorielles calculées
   CurvePlot(y_array,clrDodgerBlue);
 
//--- attend l'appui sur les touches Escape ou PgDn pour supprimer le graphique (prendre une capture d'écran) et quitter
   while(!IsStopped())
     {
      if(StopKeyPressed())
         break;
      Sleep(16);
     }
 
//--- nettoyage
   ExtGraph.Destroy();
   /*
  résultat :
   vector X = 
   [0,1,2,3,4,5,6,7,8]
   MathLog(X) = 
   [-inf,0,0.6931471805599453,1.09861228866811,1.386294361119891,1.6094379124341,1.791759469228055,1.945910149055313,2.079441541679836]
   */
  }
//+------------------------------------------------------------------+
//| Remplit un vecteur avec 'value' par incréments de '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
  }
//+------------------------------------------------------------------+
//| si appui sur ESC, retourne 'vrai'                                |
//| Si appui sur PgDn, prends une capture d'écran et retourne 'true' |
//| Sinon, retourne 'false'                                          |
//+------------------------------------------------------------------+
bool StopKeyPressed()
  {
//--- si ESC est enfoncé, renvoie 'true'
   if(TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE)!=0)
      return(true);
//--- si PgDn est enfoncé et qu'une capture d'écran graphique est prise avec succès, renvoie 'true'
   if(TerminalInfoInteger(TERMINAL_KEYSTATE_PAGEDOWN)!=0 && MakeAndSaveScreenshot(MQLInfoString(MQL_PROGRAM_NAME)+"_Screenshot"))
      return(true);
//--- retourne 'false'
   return(false);
  }
//+------------------------------------------------------------------+
//| Crée un objet graphique et dessine une courbe           |
//+------------------------------------------------------------------+
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();
  }
//+------------------------------------------------------------------+
//| Prend une capture d'écran et l'enregistre dans un fichier        |
//+------------------------------------------------------------------+
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);
  }

 

Résultat :

MathLog_Screenshot

Voir aussi

Les types réels (double, float)