トップ  >  リファレンス  >  基本  >  データ型  > 浮動小数点数型[double , float]
スポンサーリンク
検索
カスタム検索
リファレンスツリー
オススメ

天才数学者のエドワード・オークリー・ソープの物語とジョン・ケリーの公式は必見です。
浮動小数点数型[double , float]


浮動小数点型(double , float)は小数点以下の小さな値を表現する事が出来ます。

MQL4言語では2つの浮動小数点型が使用できます。
コンピュータ・メモリの実数表現のメソッドは、
IEEE754(浮動小数点数演算標準)によって定義されており、
プラットホーム・オペレーティングシステム・プログラミング言語から独立しています。

データサイズ
[Byte]
正数の最小値 正数の最大値 精度
[有効桁数)
float 4 1.175494351e-38 3.402823466e+38 7桁
double 8 2.2250738585072014e-308 1.7976931348623158e+308 15桁


doubleの名称はfloat型の精度が倍である事を意味します。

floatは精度が限定されている為、十分な結果を得られない事がある為、ほとんどの場合doubleを使用します。
floatが使用される理由は、メモリの使用量がdoubleの半分だからです。
浮動小数点数型の大きな動的配列を使用する時、
限定された精度のデータを取り扱う場合にfloatを使用するとメモリ消費を抑えられます。


浮動小数点定数は、整数と小数点と少数で成り立ちます。
整数と少数は10進数の連続した数値で表します。

サンプルソース:
    double tmp_double;
    float  tmp_float;

    tmp_double = 12.111;
    tmp_double = -956.1007;

    tmp_float  = 0.0001;
    tmp_float  = 16;



    // 大きな配列を使用し、メモリ消費を抑えたい場合
    float  tmp_array_float[999999];             // 大きな配列を宣言
    ArrayInitialize( tmp_array_float , 0 ));  // 大きな配列を0で初期化
    float[0] = 0.25;                             // 精度の低いデータを代入



浮動小数点数型は、2進数の限られた精度でメモリに保存される事に注意しなければなりません。

管理人の勝手なコメント:
極端な事を言えば、
2の累乗用いて小数点以下のデータを保存している為、精度の範囲内で割り切れる値は正確に保存されますが、
精度の範囲内で割り切れない値は誤差が生じます。
あくまで極端な例です。厳密に言えばそんな単純ではありません。
詳細はインターネットで"IEEE754"を検索してみて下さい。


サンプルソース:
    double tmp_double_a;
    double tmp_double_b;
    double tmp_double_c;
    double tmp_double_div;
    
    // 割り切れる除算結果を保存
    tmp_double_div = 4.0;

    tmp_double_a   = 1 / tmp_double_div;    // 除算結果:0.25
    tmp_double_b   = 2 / tmp_double_div;    // 除算結果:0.50
    tmp_double_c   = 3 / tmp_double_div;    // 除算結果:0.75

    if ( ( tmp_double_a + tmp_double_b) == tmp_double_c ) {
        Print("一致");                      // 一致する
    } else  {
        Print("不一致");
    }


    // 割り切れない除算結果を保存
    tmp_double_div = 3.0;

    tmp_double_a   = 1 / tmp_double_div;    // 除算結果:0.3333333333333333
    tmp_double_b   = 4 / tmp_double_div;    // 除算結果:1.333333333333333
    tmp_double_c   = 5 / tmp_double_div;    // 除算結果:1.666666666666667

    if ( ( tmp_double_a + tmp_double_b) == tmp_double_c ) {
        Print("一致");
    } else  {
        Print("不一致");                   // 不一致になる
    }


スポンサーリンク



Copyright ©2015 MT4でEA自作しちゃお〜 All Rights Reserved.


Top

inserted by FC2 system