오류, 버그, 질문 - 페이지 1128

 

"일반" 비교에서는 부호 없는 유형으로 캐스트됩니다.

 void OnStart ()
{
   ulong i= 0 ;
   while ( true )
  {
     if (i< ULONG_MAX ) {i++;}   //тут в условии так и остаётся тип ulong, преобразования к long не происходит
     else { break ;}
  }
}
 
Fleder :

그런 다음 그것을 설명하는 방법:

 long t= 0 ;
   bool comp=( ULONG_MAX - 1 >t);
   Print ( "comp = " ,comp);   //comp = true
비트 비교 - 모순 없음. 그런 다음 - ulong과 long을 비교하는 것은 long < 0인 경우에만 올바르지 않습니다.
 
void OnStart ()
{
   long n= 0 ;
   uint g= UINT_MAX ;
//for(int i=0;i<UINT_MAX;i++) {n++;}  //здесь получаем бесконечный цикл и предупреждение expression is always true
   for ( int i= 0 ;i<g;i++) {n++;}         //здесь получаем предупреждение sign mismatch и цикл в 4294967295 итераций
   Print ( "n = " ,n);                     //n = 4294967295            
}

검사할 첫 번째 루프 표현식에서 int 유형의 변수는 uint 유형의 정수 상수와 비교됩니다.

암시적 유형 변환 이 없으며 비트 비교가 수행됩니다. 표현은 항상 참입니다.

두 번째 루프의 테스트 중인 표현식에서 int 유형의 변수는 uint 유형의 변수와 비교됩니다.

변수 i는 암시적으로 uint 유형으로 캐스트됩니다. 그리고 변수 i 오버플로 후: uint(-1)= 4294967295  

표현식은 거짓이 될 것입니다.


 

에포크 종료( UNIX?) 8시간 지연:

정수 유형

유형

크기(바이트)

최소값

최대값

C ++ 언어 의 아날로그

날짜 시간

여덟

0 (1970.01.01 0:00:00)

32 535 244 799 ( 3000.12.31 23:59:59 )

__time64_t

 void OnStart ()
{
   Print (( datetime ) 32535244799 );   // 3001.01.01 07:59:59
}
 

개발자,

MQL 언어의 문법에 대한 공식적인 설명을 제공하고 부거를 찾도록 하십시오 :-)))

 

간단한 것:

이중 최소, 최대;

i=막대-1- 기간 1 ;
동안(최대-최소==0)
{
최소=낮음[i];
최대=높음[i];
나는 ++;
}

TF: D1 및 M4에서 디버거는 min=Low[i]; 행을 거부하고 터미널이 멈춥니다. 다른 TF에는 이 문제가 없습니다. min=iLow() 대체 아무것도 주지 않는다. "구멍"이 어디에 있는지 알려주십시오. 역사, 새로운 MT4 편집기 또는 내 머리에?

 
admoon :

간단한 것:

   double min,max;

   i= Bars - 1 -period1;
   while (max-min== 0 )
     {
      min=Low[i];
      max=High[i];
      i++;
     }

TF: D1 및 M4에서 디버거는 min=Low[i]; 행을 거부하고 터미널이 멈춥니다. 다른 TF에는 이 문제가 없습니다. min=iLow() 대체 아무것도 주지 않는다. "구멍"이 어디에 있는지 알려주십시오. 역사, 새로운 MT4 편집기 또는 내 머리에?

포럼에서 메시지를 작성할 때 "SRC" 버튼을 사용 하여 코드를 삽입하십시오.


이렇게 하면 메시지를 더 쉽게 읽을 수 있습니다.

 
Fleder :

에포크의 끝( UNIX?) 이 8시간 지연됨:

설명서에 오류가 있는 것 같습니다.
 Print ( ulong (:: StringToTime ( "3000.12.31 23:59:59" ))); //32'535'215'999

또는 우리는 뭔가를 모릅니다. 누군가 수동으로 계산한 것과 같습니다. https://www.mql5.com/en/forum/16036

 
A100 :
분명히 도움말에 max=32'535'215'999 오류가 있습니다.

단지 날짜/시간 유형 에 대한 제한이 잘못 정의된 것뿐입니다.

 void OnStart ()
{
   Print (( datetime ) 32535244799 );   //3001.01.01 07:59:59
   Print (( datetime ) 32535244800 );   //wrong datetime
}
 
Fleder :

단지 날짜/시간 유형 에 대한 제한이 잘못 정의된 것뿐입니다.

32'535'244'799 != 32'535'215'999 - 어느 것이 맞습니까?