エラー、バグ、質問 - ページ 2360

 
Aliaksandr Hryshyn:

開発者向けのエラーです。

スクリプトがコンパイルされません、原因を特定してください))。添付ファイルをご利用ください。


同じファイルです。


全てのコンパイルで、エラー行を削除

 
Vladimir Pastushak:

すべてコンパイルされ、エラー行を削除

エディタでの行長 制限

 
Fast528:

エディターで行の長 さを制限する

文字列が4095文字以上になると、表示されなくなります。

 
fxsaber:

なぜここでこうなるのか、バカでもわかるように説明してください。

仮に奇数しか 演算できないとし、演算 結果が偶数に なった場合、上から最も近い奇数 であると仮定すると

(43 -  5) - 7  = (38)39 - 7  = (32)33
 43 - (5  + 7) = 43 - (12)13 = (30)31 

33 != 31

 
fxsaber:
乖離を探すのに数時間を費やしました。こんなの見つけた


クセのあるダブルは知っていても、足し算の順番を変えれば(相対的に 非常に異なる数字を除いて)結果が違う!というようなことはない。なぜここでこうなるのか、バカでもわかるように説明してください。

ソースの下2行を見ればわかる。

あなた自身が好きなように、指定された精度の限界で二重丸を同じ数字にする精度を定めたアゴリズムは「曲者」なのです。その理由は、明らかに、二重表現において異なる方法(乗数を入れ替える、括弧を開けるなど)で得られた同じ値が、異なる側からは目的の値に最大限近い、異なる数値になることがあるからである。次の桁まで切り上げて、最後の1桁をどうするか...。

 
fxsaber:

size+pointの場合、仮数をオーバーフローさせた後、丸め/リジェクションを行います(fpuモードに依存します)。

   float avg = 0.7;
   float size = 0.3;
   float point = 0.4;

   float r1 = avg - size - point;
   float r2 = avg - (size + point);
   cout << "r1 == r2 ? " << (r1 == r2) << '\n';

   cout << "-----avg-----\n";  prfl(avg);
   cout << "-----size-----\n"; prfl(size);
   cout << "-----point-----\n"; prfl(point);
   cout << "-----avg - size------\n"; prfl(avg - size);
   cout << "-----(avg - size) - point------\n"; prfl((avg - size) - point);
   cout << "-----size + point------\n"; prfl(size + point);
   cout << "-----avg - (size + point)------\n"; prfl(avg - (size + point));
r1 == r2 ? 0
-----avg-----
implicit_1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
exponenta = -1
sign = 0
-----size-----
implicit_1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0
exponenta = -2
sign = 0
-----point-----
implicit_1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1
exponenta = -2
sign = 0
-----avg - size------
implicit_1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
exponenta = -2
sign = 0
-----(avg - size) - point------
implicit_1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
exponenta = -25
sign = 1
-----size + point------
implicit_1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 0
exponenta = -1
sign = 0
-----avg - (size + point)------
implicit_1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
exponenta = -24
sign = 1

一般に、2つのダブレットの結果は、同じ方法で得られた場合のみ同じになる(整数を扱っている場合を除く)。

 
A100:
イリヤ・マレフ
pavlick_:

回答ありがとうございました!一つ一つが貴重でした。PRICEに同じ項目を追加しても、順番が違えば違うPRICEになることに初めて遭遇(気づき)しました。そのため、テスターの結果が異なる。

ダビングについて議論する際、いつ、なぜ比較されるのかが明確になった。しかし、価格プラスアルファのポイントと出力結果が異なることで、ここまで明確にTCの結果が左右されるのは初めてのことです。


このような曖昧さを回避するためには、算出された価格に半ポイント以下のミズンを加えて正規化する必要があることがわかったのです。

 
fxsaber:

このような曖昧さを回避するためには、算出された価格に半値以下の端数を加えて正規化する必要があることがわかった。

また、そんな些細なことからTCの結果が大きく変わるなら、「ありがとう」と言って、そんなTCはゴミ箱に捨てればいいという意見もあります。

 
fxsaber:

一つ一つ貴重なお返事をありがとうございました。PRICEに同じ項目を追加しても、順番が違えば違うPRICEになることに初めて遭遇した(気が付いた)。そのため、テスターの結果が異なる。

ダビングについて議論する際、いつ、なぜ比較されるのかが明確になった。しかし、価格プラスアルファのポイントと出力結果が異なることで、ここまで明確にTCの結果が左右されるのは初めてのことです。


このような曖昧さを回避するためには、算出された価格に半ポイント以下のミズンを加えて正規化する必要があることがわかったのです。

機能でマッピングする価値があるのかも?

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2017.02.24
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Ilya Malev:

そして、そんな小さなことからTCの結果が大きく変わったら、「ありがとう」と言って、そんなTCはゴミ箱に捨てればいいという意見もあります。

大きくは変わらない、ただ変わるだけ。それだけで調査を開始することができます。