関係演算子

MQL4基礎

関係演算子

関係演算子

 関係演算子(比較演算子)とは、関係演算子を挟んで 2つの式や値の比較を行ない、結果を bool型(true 又は false)で返します。true以外の結果(条件が合わない時)は全て falseになります。又、これらは整数型で表すことも出来て、trueの時は 1、falseの時は 0で表示されます。

 通常、if文や for文などの条件処理と合わせて使われます。

関係演算子説明
==a == b; a と b が等しければ true。それ以外は false。
!=a != b; a と b が等しくなければ true。それ以外は false。
<=a <= b; a が b 以下なら true。それ以外は false。
>=a >= b; a が b 以上なら true。それ以外は false。
<a < b; a が b 未満なら true。それ以外は false。
>a > b; a が b より大きいなら true。それ以外は false。

使用例

関係演算子例 1

 関係演算子と条件処理を使った例です。
 ①②③のように内容は同じでも違った書き方が可能です。通常は①で書かれます。場合によっては②③のように書くこともあるので覚えておくと良いでしょう。

コード

// 関係演算子計算例 1
#property strict
int a=1, b=2, c=3;

void OnInit() {

if (a == (c - b)) {                        // ①通常の書き方
   Print("①[true] aとc-bは等しい");
} else {
   Print("①[false] aとc-bは等しくない");
}

if ((a == (c - b)) == true) {              // ②別の書き方1
   Print("②[true] aとc-bは等しい");
} else {
   Print("②[false] aとc-bは等しくない");
}

if ((a == (c - b)) == 1) {                 // ③別の書き方2
   Print("③[true] aとc-bは等しい");
} else {
   Print("③[false] aとc-bは等しくない");
}
}

コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)

結果

関係演算子で実数値を使う時は注意!!

 小数点を含む実数型を関係演算子で扱う場合は、実数型は浮動小数点が使われているので「==(等しい)」が成立しない場合があります。このような時は、NormalizeDouble関数をと合わせて使うことで解決が出来ます。

 次のコードの④で関係演算子の左右が 0.1になりますが、等しくないと判定されています。これは浮動小数点の計算で誤差が発生してしまうことが原因です。

 この解決方法として⑤のように NormalizeDouble関数を使って必要な桁数に数値を丸めることによって浮動小数点の誤差を無くし、関係演算子「==」を成立させることが出来ます。

コード

// 関係演算子計算例 2
#property strict
double a=0.1, b=0.2, c=0.3;

void OnInit() {

if (a == (c - b)) {                                         // ④浮動小数点で誤差が発生
   Print("④[true] aとc-bは等しい");
} else {
   Print("④[false] aとc-bは等しくない");
}

if (NormalizeDouble(a, 1) == NormalizeDouble((c - b), 1)) { // ⑤誤差を発生させない解決方法
   Print("⑤[true] aとc-bは等しい");
} else {
   Print("⑤[false] aとc-bは等しくない");
}
}

コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)

結果

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