MathLog1p

式MathLog(1+x)の値を返します。

double  MathLog1p(
  double  value      // 対数を取る値
  );

パラメータ

value

[in]  対数を取る値

戻り値

成功した場合は、valueの自然対数(value + 1)。valueが-1より小さい場合はNaN(未定義の値)を返します。valueが-1に等しい場合はINF(無限大)を返します。

注意事項

xの値が0に近い場合、MathLog1p(x)関数はMathLog(1+x)関数よりもはるかに正確な値を生成します。

MathLog1p()関数の代わりに、log1p()関数を使用できます。

 

例:

#define GRAPH_WIDTH 750
#define GRAPH_HEIGHT 350
 
#include <Graphics\Graphic.mqh>
 
CGraphic ExtGraph;
//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                              |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- step 1で0〜8の9個の値を取得する
  vector X(9,VectorArange);
  Print("vector X = \n",X);
//--- 各ベクトル値について、式の対数を計算する(1 + Xベクトル値)
  X=MathLog1p(X);
  Print("MathLog1p(X) = \n",X);
 
//--- 計算された値をベクトルから配列に転送する
  double y_array[];
  X.Swap(y_array);
 
//--- 計算されたベクトル値のグラフを描画する
  CurvePlot(y_array,clrDodgerBlue);
 
//--- EscapeキーまたはPgDnキーを押してグラフを削除し(スクリーンショットを撮り)、終了するまで待機する
  while(!IsStopped())
    {
    if(StopKeyPressed())
        break;
    Sleep(16);
    }
 
//--- クリーンアップ
  ExtGraph.Destroy();
  /*
  結果:
  vector X =
  [0,1,2,3,4,5,6,7,8]
  MathLog1p(X) =
  [0,0.6931471805599453,1.09861228866811,1.386294361119891,1.6094379124341,1.791759469228055,1.945910149055313,2.079441541679836,2.19722457733622]
  */
 }
//+------------------------------------------------------------------+
//| ベクトルに「value」を「step」単位で入力する                                  |
//+------------------------------------------------------------------+
template<typename T>
void VectorArange(vector<T> &vec,T value=0.0,T step=1.0)
 {
  for(ulong i=0; i<vec.Size(); i++,value+=step)
    vec[i]=value;
 }
//+------------------------------------------------------------------+
//| ESCが押されたら「true」を返す                                            |
//| PgDnが押されたら、グラフのスクリーンショットを撮り、「true」を返す                     |
//| その他の場合は「false」を返す                                           |
//+------------------------------------------------------------------+
bool StopKeyPressed()
 {
//--- ESCが押されたら「true」を返す
  if(TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE)!=0)
    return(true);
//--- PgDnが押されてグラフのスクリーンショットが正常に取得されたら、「true」を返す
  if(TerminalInfoInteger(TERMINAL_KEYSTATE_PAGEDOWN)!=0 && MakeAndSaveScreenshot(MQLInfoString(MQL_PROGRAM_NAME)+"_Screenshot"))
    return(true);
//--- 「false」を返す
  return(false);
 }
//+------------------------------------------------------------------+
//| グラフオブジェクトを作成して曲線を描く                                        |
//+------------------------------------------------------------------+
void CurvePlot(double &x_array[], double &y_array[], const color colour)
 {
  ExtGraph.Create(ChartID(), "Graphic", 0, 0, 0, GRAPH_WIDTH, GRAPH_HEIGHT);
  ExtGraph.CurveAdd(x_array, y_array, ColorToARGB(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(54, 9, text1, ColorToARGB(clrBlack));
  ExtGraph.TextAdd(54,21, text2, ColorToARGB(clrBlack));
  ExtGraph.Update();
 }
//+------------------------------------------------------------------+
//| スクリーンショットを撮り、画像をファイルに保存する                                 |
//+------------------------------------------------------------------+
bool MakeAndSaveScreenshot(const string file_name)
 {
  string file_names[];
  ResetLastError();
  int selected=FileSelectDialog("Save Picture", NULL, "All files (*.*)|*.*", FSD_WRITE_FILE, file_names, file_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(0, file_names[0], GRAPH_WIDTH, GRAPH_HEIGHT);
  ChartSetInteger(0,CHART_SHOW,true);
  return(res);
 }

 

結果:

MathLog1p_Screenshot

参照

実数型(double、float)統計科学的チャートクライアント端末プロパティ