NormalizeDouble関数|実数型(Double型)の比較
佐川直弘(株式会社トリロジー取締役)
MetaTrader 4(MT4)のMQL4プログラムでは、実数型(Double型)の値を比較する際に、プログラマが期待した動作をしない場合があります。この記事では、初心者にもわかりやすく、`NormalizeDouble`関数を使って実数型の値を比較する方法を解説します。
実数型の比較とは?
実数型の値を比較する際、浮動小数点の特性により、少数点以下の値が正確に一致しないことがあります。これは、計算の過程で誤差が生じるためです。例えば、1.0と1.0という2つの値が等しくならない場合があります。この問題を解決するためには、`NormalizeDouble`関数を使用して誤差をなくしたうえで、2つの値を比較します。
NormalizeDouble関数の使用
実数型の値を比較する前に、`NormalizeDouble` 関数を使用して値を正規化することで、誤差を取り除きます。
- 関数仕様
- double NormalizeDouble(double value, int digits)
- value
- 正規化する値
- digits
- 小数点以下の桁数(0~8)
以下は、`NormalizeDouble` 関数を使用して実数型の値を比較するサンプルコードです。
- サンプルコード
- double a1 = 0.001;
double a2 = 0.002;
if (NormalizeDouble(a1, 8) == NormalizeDouble(a2, 8)) {
Print(“a1 = a2");
} else {
Print(“a1 != a2");
}
上記のサンプルコードを実行すると、以下のような結果が得られます。
- 実行結果
- a1 != a2
このように、`NormalizeDouble` 関数を使用することで、実数型の値を正確に比較することができます。
使用例
以下に、実際のトレードプログラムで`NormalizeDouble` 関数を使用して実数型の値を比較する例を示します。
- 利益計算の使用例
- double profit_target = 100.123456789;
double current_profit = 100.123456789;
if (NormalizeDouble(profit_target, 6) == NormalizeDouble(current_profit, 6)) {
Print(“目標利益に達しました。");
} else {
Print(“目標利益にはまだ達していません。");
}
この例では、目標利益と現在の利益を6桁に正規化して比較しています。これにより、適切な精度で値が比較されます。
まとめ
`NormalizeDouble` 関数を使用することで、実数型の値を正確に比較することができます。これにより、プログラム内での値の比較が正確に行われ、期待通りの動作が実現されます。初心者の方も、まずはこの関数の基本的な使い方を学び、実際のプログラムに応用してみてください。
ディスカッション
コメント一覧
まだ、コメントがありません