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

 
Slava:

そして、あなたの例は、純粋に理論的なものだからです。純粋に学生のためのものです。まともなプログラマーなら、こんなものを製品にすることはない。

ポストフィックスとプリフィックスのインクリメントと デクリメントは、まずループの中で実際に使われます。そして、それらはインクリメントとデクリメントと呼ばれています

以下はその例です。

и

もし、プリフィックスとポストフィックスの演算が同じように機能すると主張するならば、手に旗、首に太鼓を立ててください。

プリフィックスインクリメントの場合、最後の反復処理で初期化されていないNULL配列要素と配列範囲外エラーが発生します。

あなたの高邁な精神では理解できないのかもしれない、もう一度質問を繰り返す。

а при чем тут array[++i]=i и array[i++]=i, как я могу сравнить то, чего не было в беседе...

ハイライトされたものは見づらいですか?

さて本題ですが、なぜ会話に登場する例では、mqlの結果が== 12で、手打ちになったかどうかは関係なく、後置演算と前置演算に差がある場合、結果が== 13になるはずです

しかし、上記の私の質問は、コンパイル時の言語の曖昧さが十分であると信じるに足る理由を与えるものであり、ブランチの誰かに飛びかかる前に、これらのUBに対処してください。

ところで、ヘルプはすでにいじられているようですね ))

 
Konstantin:

あなたの高邁な精神では理解できないのかもしれませんね、もう一度質問を繰り返します。

ハイライト部分がわからない?

さて本題ですが、なぜ会話に登場する例では、mqlの結果が== 12で、手打ちになったかどうかは関係なく、後置演算と前置演算に違いがあれば、結果は== 13になるはずなのですが......。

しかし、上記の私の質問は、コンパイル時の言語の曖昧さが十分であると信じるに足る理由を与えるものであり、ブランチの誰かに飛びかかる前に、これらのUBに対処してください。

ちなみに、ヘルプはかき回したような感じです)。

鼻息荒くしないでください。

結果は13でなければならないと誰が言った?ここでも、副作用のある結果は、最適化に大きく左右されます。このような式に最適化を適用しない場合でも、変数の値の変化、つまり使用直後や式の計算後の変化が実装として登場します。どの実装が正しいのでしょうか?

UBを扱うつもりはない、それは未定義だ、とはっきり書いているのです。

ヘルプはどこにコピーされたのですか?1月18日付けMetaEditor build 1755のMQL5リファレンスを開いてみました。同じことが書かれています

重要な お知らせ

int i=5;
int k = i++ + ++i;

上記の式をあるプログラミング環境から別のプログラミング環境に移行する際(例えば、Borland C++からMQL5へ)、計算上の問題が発生する場合があります。一般に、計算の順番はコンパイラの実装に依存する。実際には、ポストデクリメントを実装する方法は2つあります。

  1. ポストデクリメント(ポストインクリメント)は、式全体を計算した後に変数に適用さ れる。
  2. ポストデクリメント(ポストインクリメント)は、操作の直後に変数に適用さ れる

現在、MQL5では、1つ目の減分後の計算方法が実装されています。しかし、この特性を知っていても、実験的に使用することはお勧めできません。


あなたの最初の発言は、postfixとprefixの操作に違いはない、というものでした。ないですか?

 
Slava:

ノリノリではダメです。

結果は13でなければならないと誰が言った?ここでも、副作用のある結果は、最適化に大きく左右されます。このような式に最適化を施さなくても、使った直後や計算後に変数の値が変わるという実装が登場するのです。どの実装が正しいのでしょうか?

UBを扱うつもりはない、だから未定義なのであって、「そんなことはするな」と明示的に言っているのです。

参考までにどこに行ったのですか?1月18日付けMetaEditor build 1755のMQL5リファレンスを開いてみました。同じことが書いてある

重要な お知らせ

int i=5;
int k = i++ + ++i;

上記の式をあるプログラミング環境から別のプログラミング環境に移行する際(例えば、Borland C++からMQL5へ)、計算上の問題が発生する場合があります。一般に、計算の順番はコンパイラの実装に依存する。実際には、ポストデクリメントを実装する方法は2つあります。

  1. ポストデクリメント(ポストインクリメント)は、式全体を計算した後に変数に適用さ れる。
  2. ポストデクリメント(ポストインクリメント)は、操作の直後に変数に適用さ れる

現在、MQL5では、1つ目の減分後の計算方法が実装されています。しかし、この特性を知っていても、実験的に使用することはお勧めできません。


あなたの最初の発言は、postfixとprefixの操作に違いはない、というものでした。そうでしょう?

私は生意気ではありません、あなたが対話を始めた場所に注意してください、すなわち、私は私が知らなかったコードを実行しなければならなかった - スーパー

というのも、私が(2年ほど前に)mqlでpostfixとprefixの操作を扱っていたとき、明らかにこの資料を今は覚えていないのです。

ということで、この話題は終了し、この違いを紹介し、うまくいったのですが、変更することを警告する必要があります。

 
. ... Rick D. ... .:
アカウントタイプRETAIL_HEDGINGの一部ポジションのクローズについて アドバイスをお願いします。例えば、Expert Advisorでポジションの半分を決済すると、より少ないロットの新規注文が自動的にオープンされるはずです。では、どの時点で新しい注文が端末に入ることが保証されるのでしょうか?PositionClosePartialの直後に表示される必要はなく、OnTradeのどこかでキャッチする必要があるという理解で合っていますか?
私自身の質問に答えてみよう。PositionClosePartialを呼び出すと、決済された注文のチケットがCTrade::ResultOrder()に戻り、ポジションチケットはそのままですが、ポジション自体のロットは小さくなります。ここで、PositionClosePartialの呼び出しにより、1回の取引でポジションの減少と注文履歴の変更が同期的に行われると結論付けてみましょう。
 

あれは一体何なんだ?

2018.05.15 12:50:04.594 Pred_Find (GBPUSD,M1)   Access violation at 0x000000013F1C4945 read to 0xFFFFFFFFFFFFFFFF
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48A0 48895 C2418        mov        [rsp+0x18], rbx
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48A5 48897 C2420        mov        [rsp+0x20], rdi
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48AA 4156              push       r14
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48AC 4883 EC20          sub        rsp, 0x20
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48B0 488 BDA            mov        rbx, rdx
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48B3 4 C8BF1            mov        r14, rcx
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48B6 4883 FA20          cmp        rdx, 0x20
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48BA 7307              jae        0x13f1c48c3
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48BC BB20000000        mov        ebx, 0x20
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48C1 EB13              jmp        0x13f1c48d6
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48C3 488 BCB            mov        rcx, rbx
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48C6 83 E107            and        ecx, 0x7
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48C9 740 B              jz         0x13f1c48d6
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48CB B808000000        mov        eax, 0x8
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48D0 482 BC1            sub        rax, rcx
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48D3 4803 D8            add        rbx, rax
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48D6 498 B4620          mov        rax, [r14+0x20]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48DA 33 FF              xor        edi, edi
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48DC 4885 C0            test       rax, rax
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48DF 0 F8485000000      jz         dword 0x13f1c496a
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48E5 483 B58F8          cmp        rbx, [rax-0x8]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48E9 7616              jbe        0x13f1c4901
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48EB 488 B5008          mov        rdx, [rax+0x8]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48EF 33 C0              xor        eax, eax
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48F1 0 FB6CA            movzx      ecx, dl
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48F4 4883 E2FC          and        rdx, 0xfc
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48F8 80 E102            and        cl, 0x2
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48FB 480 F44C2          cmovz      rax, rdx
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48FF EB0E              jmp        0x13f1c490f
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4901 488 BF8            mov        rdi, rax
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4904 488 B00            mov        rax, [rax]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4907 A802              test       al, 0x2
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4909 7509              jnz        0x13f1c4914
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C490B 4883 E0FC          and        rax, 0xfc
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C490F 4885 C0            test       rax, rax
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4912 75 D1              jnz        0x13f1c48e5
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4914 4885 FF            test       rdi, rdi
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4917 7451              jz         0x13f1c496a
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4919 488 BD7            mov        rdx, rdi
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C491C 498 D4E18          lea        rcx, [r14+0x18]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4920 E89B0F0000        call       0x13f1c58c0  ; #5079 (terminal64.exe)
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4925 4 C8B47F8          mov        r8, [rdi-0x8]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4929 4 C2BC3            sub        r8, rbx
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C492C 4983 F820          cmp        r8, 0x20
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4930 7224              jb         0x13f1c4956
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4932 4983 C0F8          add        r8, 0xf8
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4936 488 D5308          lea        rdx, [rbx+0x8]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C493A 4803 D7            add        rdx, rdi
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C493D 498 D4E18          lea        rcx, [r14+0x18]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4941 4 C8942F8          mov        [rdx-0x8], r8
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)      crash -->  000000013 F1C4945 4 D894410F8        mov        [r8+rdx-0x8], r8
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C494A 48895 FF8          mov        [rdi-0x8], rbx
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C494E 4 D8B4618          mov        r8, [r14+0x18]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4952 41 FF5008          call       qword near [r8+0x8]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4956 488 BC7            mov        rax, rdi
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4959 488 B5C2440        mov        rbx, [rsp+0x40]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C495E 488 B7C2448        mov        rdi, [rsp+0x48]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   00: 0x000000013F1C4945
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   01: 0x000000013F63EA90
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   02: 0x00000000FFFFFFFF
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   03: 0x000000005A3CD7A0
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   04: 0x000000013F6303ED
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
 
Konstantin:

\私は(約2年前)mqlのpostfixとprefixの操作を扱っていたとき、私は明らかにこの資料を覚えていないので、それは、大きく蒸し返されています。

一般的には、トピックはクローズドで、この違いを導入してうまくやったのですが、変更点を警告する必要があるのでは?

興味本位で、2015年6月の旧1159ビルドを確認することにしました。そのヘルプには、Slavaが引用した内容がすべて書かれています。だから、何か混同しているのかもしれませんね。

 
Aleksey Vyazmikin:

あれは一体何なんだ?

クラッシュです:)ServicedeskへGO!

 
Alexey Kozitsyn:

クラッシュです:)ServicedeskへGO!

手に入れました - 銀行を破りました :)

 
Aleksey Vyazmikin:

なるほど、銀行を破綻させたのか :)

そうなる)

 
Alexey Kozitsyn:

そうなる)

このエラーをローカライズする方法がわからないのですが?ただ、脚本が全部バレるのは嫌だし、全部詰め直すのも嫌だし......。