При программировании на языке MQL4 у новичков порой возникают ситуации, когда результаты некоторых математических вычислений отличаются от ожидаемых. При этом программа компилируется и работает, но не так, как нужно. Они начинают разбираться в программе, находят новые "ошибки" в языке, реализации функций и т.п. В большинстве случаев последующий...
これはおそらく最適なソリューションです
ダブルを等価に比較するのは正しくありませんし、また、符号を正確にする必要があります。
MT4のstdlib.mq4ファイルを見てください、正しい二重比較の例がありました。
CompareDoubles()
SZZ:こちらの記事をご覧くださいhttps://www.mql5.com/ru/articles/1561
対数、非整数での指数、三角法、......どうするんだろう。サードパーティライブラリ、インジケータを使用する。どれも誤差がある!
超メガ精度が必要な場合は、gnu mpのような特別な外部ライブラリを使用することができます。
そうでない場合、精度の保証が必要な場合(演算ごとに誤差を計算する場合)には、各種の「インターバルライブラリ」を使用する必要があります。
それでも足りない場合は、桁の代わりに多項式を使うことができます。
しかし、このような回路が実際にMTで使われているケースは見た ことがありません :-)
めにはめがねがある^^v)
ダブルを等価に比較することは正しくありませんし、また、課題は符号を正確にすることです。
MT4のstdlib.mq4ファイルを見てください、正しい二重比較の例がありました。
CompareDoubles()
さて、CompareDoublesを使った場合の実行時間は2倍に跳ね上がります。それなら、こっちの方がいいんじゃない?
さて、そんな中、CompareDoublesを使った実行時間は1/2に急増します。このようにしたほうがいい。
この例と、ループ内で DoubleToStr() を使用した例を比較し、違いがなければ、すべてが正しいということです。
ZS:私はfmod()で試してみました私は例を投稿したと思うが、それは0.07でチェックする必要がありますように、正しく動作しません - すぐにバグがポップアップ表示されます。
あなたのコードをチェックすることはできませんが、難しいことではありません。ループ内でDoubleToStr()を使用した例とあなたの例を比較して、違いがなければ、すべてが正しいということです。
すでに確認し、速度を計算した結果、それがベストな方法だと思います。もちろん、7文字以上を探す必要がある場合は別ですが。
S.s. 0.7 と 0.07 と 500000000.0001 など、すべて正しく計算されています。
s.s. しかし、500000000.9991の場合は、もっとひどい処理になります。しかし、FXの実務ではほとんど関係ありません。
しかし、FXの実務では、これはほとんど重要ではありません。
取引注文 の場合、この問題は無意味です。価格は桁数で正規化され、ロットは最小ロットに対する相対値です。
数理モデリングの問題であれば、役に立つかもしれません。
もし、取引注文 であれば、このタスクは全く意味がありません。
数理モデルとの課題であれば、有効かもしれません。
もちろん、ニューラルネットワークを書くわけではありません =))) と言いながら、価格/ロット/お金を10進数の4バイト整数で格納すると、データサイズが2倍になって便利です。
ダブルを等価に比較することは正しくありませんし、また、課題は符号を正確にすることです。
MT4のstdlib.mq4ファイルを見てください、正しい二重比較の例がありました。
CompareDoubles()
SZZ:こちらの記事でしたhttps://www.mql5.com/ru/articles/1561
そこで、xが何桁で正規化されるかを決めるのが課題である。だから大丈夫なんです。そんなハシゴを書くのが面倒なら別ですが。
そんなハシゴを書くのが面倒なら別ですが。
ハシゴを使わなくてもできますが、1割ほど時間がかかります。
ハシゴを使わなくてもできますが、1割ほど時間がかかります。
これは、f/=0.0000001;というのが疑問です。