ブログタイトルを「FX自動売買システム開発部」から「autoFX」に変更しました!

double型には計算誤差が常につきまとう

NormalizeDouble関数を活用すべし

double型の計算誤差のお話です。

2/3を計算すると0.666…となりますが、どこかで見切りをつけなければなりません。無限には持てませんから。

その見切りが計算誤差となります。

double型の場合、小数点以下15桁目までが有効桁となります。

つまり、2/3の場合、0.666666666666667となります。

あれこれと計算(通常、割り算)しているとこのようなケースによく遭遇します。

具体例をあげられずに申し訳ないのですが、明示的に割り算していなくてもMQL4の標準関数を使っているだけで計算誤差が発生することもあります。

MQL4のdouble型の計算誤差については以下の記事でも取り上げられています。

対処方法としては、double型の変数を扱う際は、まめにNormalizeDouble関数で指定小数点桁数に丸めることですね。

特にdouble型同士をif文で比較する時は必須です。

そうしないと、プログラムは不一致と判定しているのにPrint文での出力値は同じになり、頭の中がはてなマークでいっぱいになることになります。

すんごい地味なことなんですけど、この問題は結構頻繁に発生しますので、くれぐれもご注意ください。

MQL4プログラミングの最新記事8件

>完全放ったらかしEA 「AutoEndlessCatchRange」

完全放ったらかしEA 「AutoEndlessCatchRange」

「本業が忙しい!」「でも資産運用したい!」そんなあなたに最適なEAです。兼業トレーダーの方はチャートを毎日みて分析してトレードする時間はなかなか確保できないものです。トレードは本EAに任せて、本業やプライベートの時間をもっと増やしませんか?元々は自分自身のために開発したEAですので、手抜き無しのガチものです。

CTR IMG