mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 118

 
아니, 하지만 내가 틀렸다. FastLog2는 Optimize=1일 때 실제로 더 빠릅니다. 기적... With ++로 체크인이 필요합니다.
 
Alexey Navoykov :

그건 그렇고, 약 0. FastLog2에는 제로 검사가 없으므로 우선적으로 시작할 수 있습니다. 그러나 올바르게 테스트된 경우 여전히 log2보다 1.5~2배 느립니다)

그리고 부정확성은 무엇입니까?

결국 테스트 버전도 다음을 생성합니다.

 2019.01 . 05 04 : 43 : 12.372 TestLog (EURUSD,H1)     Result log2:       sum= 1400005128   time= 297 ms
2019.01 . 05 04 : 43 : 12.635 TestLog (EURUSD,H1)     Result log2_:      sum= 1400018381   time= 262 ms
2019.01 . 05 04 : 43 : 12.809 TestLog (EURUSD,H1)     Result _FastLog2:  sum= 1400004095   time= 174 ms
 
Alexey Navoykov :

그건 그렇고, 약 0. FastLog2에는 제로 검사가 없으므로 우선적으로 시작할 수 있습니다. 그러나 올바르게 테스트된 경우 여전히 log2보다 1.5~2배 느립니다)

아니요, 물론 null 검사는 log2에서 제거되거나 동일한 검사가 FastLog2에 삽입되어야 합니다.

문제는 실제로 계산 부분의 속도에 있습니다. log2에서 모든 것은 순수한 이동 및 추가로 계산됩니다. FastLog2에서는 곱셈이 포함된 까다로운 변환 후에 테이블 값이 사용되었습니다. 이 코드는 매우 오래되었으며 수학적 보조 프로세서 시대에 사용되었으므로 상황이 완전히 바뀔 수 있습니다.

 
C++에서 확인했습니다. 예, FastLog2는 실제로 가장 빠르게 작동합니다. 정말 까다로운 코드입니다.) 아마도 비트 연산이 비교 연산보다 훨씬 빠르기 때문일 것입니다.
 
MT4에서 모든 코드를 확인했습니다. MT4에서 컴파일러는 최적화하지 않으며(즉, 합계가 있는 변형이 합계가 없는 원래 변형과 동일한 상대 결과를 표시함) MT4에서는 log2가 FastLog2보다 빠릅니다. 그리고 MT5에서는 이미 합산 없이 최적화가 수행되었으며(즉, 코드가 완전히 실행되지 않은 것으로 보입니다) FastLog2 옵션이 log2보다 빠르게 작동합니다. 코드 최적화 프로그램이 여기저기서 어떻게 작동하는지에 대한 세부 정보가 없기 때문에 이것에서 어떤 구체적인 결론을 이끌어낼 수 있는지 모르겠습니다.
 
void f(){
   static int a[]; 
   Print ( "a[]=" , ArraySize (a)); 
   ArrayResize (a, 100 ); 
   Print ( "a[]=" , ArraySize (a));}


class A
 {
public : A(){ f(); }
 };
 
A _a;

void OnStart ()
  {

  }


 
Ilya Malev :

이것은 MQL5의 표준 동작입니다. 정적 변수는 전역 변수 다음에 작동하기 시작합니다.

당신은 이것에 대해 매우 진지해질 수 있습니다.
 
fxsaber :

이것은 MQL5의 표준 동작입니다. 정적 변수는 전역 변수 다음에 작동하기 시작합니다.

이것이 모든 정적 클래스/구조 변수가 구조 자체 다음에 두 번째로 선언되어야 하는 이유입니까? 게다가 값을 할당하지 않아도 ... 컴파일러가 이 모든 작업을 자동으로 수행하도록 제안할 가치가 있습니까?

 

실제로 이것은 프로그램 코드 실행 순서를 위반하는 버그입니다. 컴파일러는 원칙적으로 이를 허용하지 않아야 합니다. 우리는 이에 대해 더 자주 개발자를 끌어들일 필요가 있습니다.

C++에서 코드는 컴파일러에 의해 위에서 아래로 엄격하게 처리되므로 위에서부터 모든 것이 이미 초기화됩니다. 그리고 당신은 바닥에 갈 수 없습니다. 그러므로 모든 것이 분명합니다. 그리고 개발자들이 여기에 몇 가지 고유한 규칙을 도입했으므로 올바른 코드 실행 순서를 보장하도록 하십시오.

 
Alexey Navoykov :

C++에서 코드는 컴파일러에 의해 위에서 아래로 엄격하게 처리되므로 위에서부터 모든 것이 이미 초기화됩니다. 그리고 당신은 바닥에 갈 수 없습니다. 그러므로 모든 것이 분명합니다.

유연성이 떨어집니다.