동일한 동작을 유발하는 조건에서 많은 "또는"(||)을 이스케이프할 수 있습니까? - 페이지 2

 
TarasBY :

다음과 같은 방법으로 계산을 최적화할 수도 있습니다.

고맙습니다! 나는 이미 bool Avals를 사용하라는 조언을 받았고 Vinin은 이것이 심각하게 느려질 것이라고 경고했습니다. 그리고 결국 Expert Advisor를 거의 완성한 후 코드에서 최적화할 다른 것을 찾고 있습니다. 저는 이미 12개월 만에 테스터에서 모든 틱에 대해 40분에서 13분으로 단축된 런을 달성했습니다!
 

몇 번이나 말했는지: MCL에 단축 검사가 없습니다. if(a||b||c||d||e){}의 경우 모든 조건이 검사됩니다.

출력 - 조건 중첩:

if(a){if(b){if(c){}}} 이 경우 첫 번째 일치 조건에서 검사가 종료됩니다.

그러나 중첩도 무한하지 않습니다. 가장 유연한 솔루션은 exit 를 사용하여 루프의 조건을 확인하는 것입니다.

 bool cond[]={a,b,c,d,e,...};
int sz = ArraySize (cond);
for ( int i= 0 ;i<sz;i++){
   if (cond[i]){
      bla.bla.bla;
       break ;
   }
}
 
Vinin : 할 수 있습니다. 속도만 많이 떨어집니다.
Viktor, 경고(bool-변수 사용에 대한)가 내 최적화 옵션에 적용됩니까?
 
FAQ :

몇 번이나 말했는지: MCL에 단축 검사가 없습니다. if(a||b||c||d||e){}의 경우 모든 조건이 검사됩니다.

출력 - 조건 중첩:

if(a){if(b){if(c){}}} 이 경우 첫 번째 일치 조건에서 검사가 종료됩니다.

그러나 중첩도 무한하지 않습니다. 가장 유연한 솔루션은 exit 를 사용하여 루프의 조건을 확인하는 것입니다.

매우 감사합니다! 나는 노력할 것이다! 스페인어를 아세요? 결국 "bla, bla, bla"는 동사 "말하다"(hablar)에서 왔습니다!
 
아니, 하지만 나는 알바니를 잘 알아 :))
 
FAQ :
아니, 하지만 나는 알바니를 잘 알아 :))

중첩 조건 if(a){if(b){if(c){}}}는 좋지 않습니다. 모든 조건은 상호 배타적이지만 Boole에서는 문제가 해결되지 않습니다. 아마 그리고 가장 가능성이 내가 뭔가를 잘못하고 있습니다. 지금까지 각 조건에 대해 이중 변수를 만들어 동일한 if()에 4개의 "or"가 있는 변수를 삽입했다는 사실에서 멈췄습니다. 예상대로 테스터의 침투율에는 영향을 미치지 않았다. 12개월 동안 모든 진드기에 동일한 13분.

아니면 이 언어를 O Blanc 이라고 합니까? 도와 주셔서 감사 합니다!

 
borilunad :

중첩 조건 if(a){if(b){if(c){}}}는 좋지 않습니다. 모든 조건은 상호 배타적이지만 Boole에서는 문제가 해결되지 않습니다. 아마 그리고 가장 가능성이 내가 뭔가를 잘못하고 있습니다.


모든 것이 정상입니다. 예를 들어 다음과 같이 부울 산술의 일부 ID만 기억하면 됩니다. a || b = !( !a && !b ). 그런 다음 결합에서 분리로 넘어가면서 "OR" 조건 검사를 "AND" 조건의 순차적(중첩) 검사로 바꿀 수 있습니다. 예를 들어 (a || b || c) , TarasBY가 위에서 올바르게 쓴 것처럼

 bool M = true ;

if (!a) { if (!b) { if (!c) M= false ;}}

if (!M) {Action;}

이 코드는 일반적으로 ||가 있는 원래 코드보다 빠릅니다. 목록의 조건 중 하나가 참일 때, 즉 전체 OR 연산이 TRU가 될 때까지만 실행됩니다.

 
alsu :

모든 것이 정상입니다. 예를 들어 다음과 같이 부울 산술의 일부 ID만 기억하면 됩니다. a || b = !( !a && !b ). 그런 다음 결합에서 분리로 넘어가면서 "OR" 조건 검사를 "AND" 조건의 순차적(중첩) 검사로 바꿀 수 있습니다. 예를 들어 (a || b || c) , TarasBY가 위에서 올바르게 쓴 것처럼

이 코드는 일반적으로 ||가 있는 원래 코드보다 빠릅니다. 목록의 조건 중 하나가 참일 때, 즉 전체 OR 연산이 TRU가 될 때까지만 실행됩니다.

예를 들어 조건 A가 평균적으로 C보다 더 자주 충족되고 C가 B보다 더 자주 충족된다는 것을 알고 있다면 속도를 높일 수도 있습니다. if(!a){if(! c) {(!b) M=거짓;}}인 경우
 
alsu :

모든 것이 정상입니다. 예를 들어 다음과 같이 부울 산술의 일부 ID만 기억하면 됩니다. a || b = !( !a && !b ). 그런 다음 결합에서 분리로 넘어가면서 "OR" 조건 검사를 "AND" 조건의 순차적(중첩) 검사로 바꿀 수 있습니다. 예를 들어 (a || b || c) , TarasBY가 위에서 올바르게 쓴 것처럼

이 코드는 일반적으로 ||가 있는 원래 코드보다 빠릅니다. 목록의 조건 중 하나가 참일 때, 즉 전체 OR 연산이 TRU가 될 때까지만 실행됩니다.

참여해주셔서 감사합니다! 나는 5가지 다르지만 동일한 조건을 가지고 있으며, 아무 것도 충족되지 않으면 EA는 그 중 하나가 충족될 때까지 기다립니다. 따라서 나의 노력에도 불구하고 아직까지 어떤 형태의 구현도 더 잘 작동하는 것으로 판명되지 않았습니다. 따라서 내가 "파이"와 함께 머무르는 동안.
 
borilunad :
참여해주셔서 감사합니다! 나는 5가지 다르지만 동일한 조건을 가지고 있으며, 아무 것도 충족되지 않으면 EA는 그 중 하나가 충족될 때까지 기다립니다. 따라서 나의 노력에도 불구하고 아직까지 어떤 형태의 구현도 더 잘 작동하는 것으로 판명되지 않았습니다. 따라서 내가 "파이"와 함께 머무르는 동안.
내가 방금 보여준 것조차도? 그렇다면 성능은 다른 것을 희생하여 개선되어야 합니다.