【MQL5】MathPow関数について

MQL5リファレンス
スポンサーリンク
スポンサーリンク

MathPow関数の働き・役割

MathPow関数は、基数を指定された指数まで引き上げるために使用されます。この関数を用いることで、任意の数値を任意の指数累乗することができます。例えば、2を3乗する場合、MathPow関数を使用することで8という結果を得ることができます。数値計算や数学的な処理を行う際に非常に有用な関数です。

基数(base)

累乗の底(累乗の対象となる数)となる数です。例えば、2の3乗の場合、2が基数です。

指数(exponent)

累乗の回数を表します。例えば、2の3乗の場合、3が指数です。

累乗

基数を指定された指数の回数だけ掛け合わせる操作です。例えば、2の3乗は2を3回掛け合わせる操作(2×2×2)です。

MathPow関数の引数について

double  MathPow(
  double  base,        // 底
  double  exponent     // 指数値
);

MathPow関数引数は以下の通りです。

base

底(累乗の対象となる数)を指定します。例えば、2の3乗の場合、2がこの引数に該当します。

exponent

指数累乗の回数)を指定します。例えば、2の3乗の場合、3がこの引数に該当します。

baseには累乗の対象となる数を指定し、exponentには累乗の回数を指定します。この2つの引数によって、MathPow関数基数を指定された指数まで累乗した結果を返します。

MathPow関数の戻り値について

MathPow関数は、基数を指定された指数まで引き上げた値を返します。戻り値の型はdoubleです。

この関数を使用すると、指定された基数指数に基づいて計算された累乗の結果を得ることができます。例えば、基数が2で指数が3の場合、戻り値は8となります。このように、MathPow関数は数値計算において非常に便利な結果を提供します。

以下は戻り値の例です:

このように、MathPow関数は様々な数値計算に対応できる柔軟な戻り値を持っています。

MathPow関数を使う際の注意点

MathPow関数の代わりに標準Cライブラリのpow関数を使用することも可能です。両者は同じ機能を提供しますが、環境やコードの可読性に応じて使い分けることができます。

次に、指数累乗の回数)として負の値を指定することもできますが、その場合、戻り値は分数(小数点以下の値)になります。例えば、基数累乗の底となる数)が2で指数が-3の場合、戻り値は0.125となります。これは、2の-3乗が1/8に相当するためです。

基数累乗の底となる数)として0を指定し、指数累乗の回数)が正の値であれば、戻り値は常に0となります。しかし、基数が0で指数も0の場合、戻り値は1となります。この特性は数値計算における特殊なケースとして理解しておく必要があります。

大きな指数値を指定すると、戻り値が非常に大きな値になることがあります。これにより、オーバーフローが発生する可能性があるため、計算結果が適切な範囲内に収まるように注意する必要があります。

MathPow関数の結果が非常に小さな値になる場合、浮動小数点数の精度に依存するため、丸め誤差が生じることがあります。このような場合、計算結果が予期しない値になる可能性があるため、結果の精度についても考慮する必要があります。

丸め誤差とは

丸め誤差とは、コンピュータが浮動小数点数を扱う際に生じる小さな誤差のことです。浮動小数点数は有限のビット数で表現されるため、非常に大きな数や非常に小さな数を正確に表現することが難しく、その結果として微小な誤差が生じることがあります。

MathPow関数を使ったサンプルコード

以下に、MathPow関数を使用して数値を累乗するサンプルコードを示します。コードには詳細な日本語コメントを付けています。

// OnStart関数はスクリプトの実行が開始されたときに自動的に呼び出されます
void OnStart()
{
    // 基数(底)と指数(累乗の回数)を指定します
    double base = 2.0;     // 基数(例:2)
    double exponent = 3.0; // 指数(例:3)

    // MathPow関数を使用して基数を指数で累乗します
    double result = MathPow(base, exponent);

    // 計算結果をエキスパートログに出力します
    Print("基数 ", base, " を指数 ", exponent, " で累乗した結果は ", result, " です");

    // 他の例として、負の指数を指定します
    exponent = -3.0;
    result = MathPow(base, exponent);
    Print("基数 ", base, " を指数 ", exponent, " で累乗した結果は ", result, " です");

    // 基数が0の場合の例
    base = 0.0;
    exponent = 3.0;
    result = MathPow(base, exponent);
    Print("基数 ", base, " を指数 ", exponent, " で累乗した結果は ", result, " です");

    // 基数と指数の両方が0の場合の例
    base = 0.0;
    exponent = 0.0;
    result = MathPow(base, exponent);
    Print("基数 ", base, " を指数 ", exponent, " で累乗した結果は ", result, " です");

    // 大きな指数を指定した場合の例
    base = 2.0;
    exponent = 100.0;
    result = MathPow(base, exponent);
    Print("基数 ", base, " を指数 ", exponent, " で累乗した結果は ", result, " です");

    // 小数の基数と指数の例
    base = 2.5;
    exponent = 1.5;
    result = MathPow(base, exponent);
    Print("基数 ", base, " を指数 ", exponent, " で累乗した結果は ", result, " です");
}

各部分の説明

基数と指数の指定

最初に、累乗基数(底)と指数累乗の回数)を指定します。ここでは、基数を2.0、指数を3.0に設定しています。

MathPow関数の使用

MathPow関数を使用して、基数を指定された指数累乗します。この結果をresult変数に格納します。

結果の出力

計算結果をエキスパートログに出力します。例えば、「基数 2 を指数3 で累乗した結果は 8 です」というメッセージを出力します。

負の指数の場合

負の指数を指定して計算します。例えば、基数が2.0で指数が-3.0の場合、結果は0.125となります。これは、負の指数が付いた累乗は、1を基数の正の指数累乗で割った値になるためです。具体的には、2の-3乗は1を2の3乗(2×2×2=8)で割った値(1/8)となり、結果は0.125になります。

基数が0の場合

基数が0で指数が3.0の場合、結果は0となります。
※数が0の場合、指数が正の値であれば、結果は常に0になります。これは、0を何回掛けても結果が0になるためです。例えば、基数が0で指数が3の場合、0の3乗(0×0×0)は0になります。

基数と指数の両方が0の場合

基数指数の両方が0の場合、結果は1となります。

基数指数の両方が0の場合、結果が1になるのは数学における慣例です。この特定のケース(0の0乗)は数学的に曖昧であり、いくつかの状況では異なる解釈が可能ですが、多くの数学的文脈および計算機科学においては0の0乗を1と定義しています。

大きな指数の場合

非常に大きな指数を指定した場合、計算結果が非常に大きな値になることを示しています。例えば、基数が2.0で指数が100.0の場合、結果は非常に大きな数値になります。

エキスパートログに出力すると、以下のような数字が出てくるはずです。

1.2676506002282294e+30

e+30という表記は、科学記法を示しています。科学記法は非常に大きな数値や非常に小さな数値を簡潔に表現するための方法です。

具体的には、1.2676506002282294e+30という表記は、1.2676506002282294 × 10^30を意味します。つまり、この数値は1.2676506002282294に10の30乗を掛けた値です。

科学記法についての詳細は下記の記事をご参照ください。


小数の基数と指数の場合

基数指数が小数の場合の計算結果を示しています。例えば、基数が2.5で指数が1.5の場合、結果は約3.95となります。
指数が小数の場合、基数をその指数累乗する計算は通常の累乗計算と同様に行われますが、より複雑な数学的操作が関与します。具体的には、指数が小数の累乗は、対数指数関数を用いて計算されます。

このサンプルコードは、MathPow関数の様々な使用例を示しており、累乗の基礎的な計算方法を理解するのに役立ちます。

補足:小数の指数の計算方法

指数が小数の場合の累乗計算は以下のように行われます:

結果を指数関数で元に戻す: 自然対数の逆関数である指数関数(exp)を使って元の数値に戻します。

基数対数に変換する: 基数の自然対数(ln)を計算します。

対数指数を掛ける: 対数に小数の指数を掛けます。

具体例

基数が2.5、指数が1.5の場合の計算を以下に示します。

  1. 基数2.5の自然対数を求めます: ln⁡(2.5)≈0.91629 
    ※≈は「ほぼ等しい」または「おおよそ等しい」を意味する記号です。これは、数値が近似値であることを示します。
    ※自然対数とは、底がネイピア数 e(約2.718)である対数のことです。記号で表すと、ln または lまたは log_eloge​ と書かれます。自然対数は、指数関数と密接に関連しており、多くの数学的・科学的な応用で使用されます。
  2. その対数指数1.5を掛けます: 0.91629×1.5≈1.37444
  3. 結果を指数関数で元に戻します:exp(1.37444)≈3.95

したがって、基数2.5を指数1.5で累乗すると、結果は約3.95となります。

小数の基数と指数を用いたサンプルコードの結果

// 小数の基数と指数の例
double base = 2.5;
double exponent = 1.5;
double result = MathPow(base, exponent);
Print("基数 ", base, " を指数 ", exponent, " で累乗した結果は ", result, " です");

このコードは、基数2.5を指数1.5で累乗し、その結果をエキスパートログに出力します。結果は約3.95となります。これは上記の手順で計算される累乗の結果です。

小数の指数の計算は、実際には対数指数関数を用いた複雑な数学的操作を含んでいますが、MathPow関数を使うことで簡単に計算できます。

指数については、下記の動画も参考にしていただければと思います。

対数とは?


対数とは、ある数が特定の底(基数)を使って何回掛け合わせられるかを示す指数のことです。

例えば、基数が10で、1000の対数を求める場合、「10を何回掛け合わせると1000になるか」を考えます。答えは3なので、10を基数とする1000の対数は3になります。これを数式で表すと以下のようになります:

log10​(1000)=3

この場合、10が基数、1000が対数を求める数(真数)、3が対数です。

一般的な対数の形式は以下のように表されます:log_b​(a)=c

ここで、bは基数、aは真数、c は対数です

対数については↓の動画も参考にしていただければと思います。

タイトルとURLをコピーしました