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

 

A100 :
32'535'244'799 != 32'535'215'999 - какое правильное? 

올바른 것은 "3000.12.31 23:59:59" 에 대해 32'535'215'999여야 합니다.

그리고 32'535'244'799는 "3001.01.01 07:59:59" 에 맞을 것입니다.

 
Fleder :

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

분명히 한계는 GMT 또는 UTC로 현지 시간을 동시에 표시할 수 있는 가능성을 고려하여 정의됩니다. 그런 다음 -43'200에서 32'535'291'599로 더 넓은 제한(+/-12시간)을 만드는 것이 논리적입니다.
 
Fleder :

컴파일러는 13.7을 이중으로 취급합니다. 그러나 동시에 이 숫자는 손실 없이 float 형식 으로 변환될 수 있습니다.

이 경고는 중복됩니다.

실수 13.7을 실수 없이 float형으로 변환할 수 있다는 정보는 어디서 얻으셨나요?
 
stringo :
실수 13.7을 실수 없이 float형으로 변환할 수 있다는 정보는 어디서 얻으셨나요?

그렇지 않습니까? 숫자 13.7 \u003d 0.137 * 1e + 2. 쉼표 뒤의 세 자리를 부동 소수점 형식 으로 변환하지 않는 한 손실을 인정할 수 있습니까? 내 관찰에 따르면 변환을 시도할 때 정확도가 손실되기 시작합니다.

소수점 이하 여섯 자리 이상의 숫자.

float 유형을 사용하여 5자리 문자 따옴표(예: 1.38829)를 바이너리 파일에 저장하려고 했습니다. 파일에서 다시 읽고 차트에 다음과 같이 표시하려고 시도한 후

차트 자체의 양초에 겹쳐진 양초 표시기의 여기저기서 작은 불일치가 발견되었습니다. 그러나 다섯 번째 자리로 정규화 된 후 그들은 사라졌습니다.

그러나 두 배의 정밀도 손실이 있었습니다. 처음에는 double에서 float로, 그리고 나서 float에서 double로 되돌아갔습니다.

 
https://www.mql5.com/ru/docs/convert/normalizedouble Fleder :

그렇지 않습니까? 숫자 13.7 \u003d 0.137 * 1e + 2. 쉼표 뒤의 세 자리 숫자를 float 형식 으로 변환하지 않는 한 손실을 인정할 수 있습니까? 내 관찰에 따르면 변환을 시도할 때 정확도가 손실되기 시작합니다.

소수점 이하 여섯 자리 이상의 숫자.

float 유형을 사용하여 5자리 문자 따옴표(예: 1.38829)를 바이너리 파일에 저장하려고 했습니다. 파일에서 다시 읽고 차트에 다음과 같이 표시하려고 시도한 후

차트 자체의 양초에 겹쳐진 양초 표시기의 여기저기서 작은 불일치가 발견되었습니다. 그러나 다섯 번째 자리로 정규화 된 후 그들은 사라졌습니다.

그러나 두 배의 정밀도 손실이 있었습니다. 처음에는 double에서 float로, 그리고 나서 float에서 double로 되돌아갔습니다.

아니요. 이것은 무한 분수입니다. 우리 는 쓰고 썼지 만 당신은 읽지 않는다
 
stringo :
아니요. 이것은 무한 분수입니다. 우리 는 쓰고 썼지 만 당신은 읽지 않는다

우리 는 읽고 있습니다! 그러나 손실은 "기술적으로"(형식 기능) 발생하며 필요하지 않은 비트에서 발생합니다.

 void OnStart ()
{
   Print (( float )( 13.7 ));   //13.7 - потерь "не видно"
   Print (( double )( 13.7 ));   //13.7 - здесь тоже
}
Особенности работы с числами типа double в MQL4 - Статьи по MQL4
  • www.mql5.com
Особенности работы с числами типа double в MQL4 - Статьи по MQL4: примеры использования экспертов, тестирования и оптимизации
 
A100 :

그런 사고도 있었습니다. 터미널(910) 빌드와 컴파일러(921) 빌드가 일치하지 않을 경우 스크립트 실행 시 발생

그리고 여기 코드가 있습니다

 class A  {
         int      array[];
};
void OnStart ()
{
        A *a = new A();
         if ( a != NULL )
                 delete ( a );
}

컴파일러 930, 터미널 910. 결과:

 
A100 :

그리고 여기 코드가 있습니다

컴파일러 930, 터미널 910. 결과:

그리고 어떻게 터미널이 910이고 컴파일러가 930이 되었습니까?

둘 다 910이면 이 스크립트는 충돌하지 않습니다.

 

하나의 터미널이 아닙니다(확실한지는 모르겠지만 제 생각에는 이것은 시장에서 흔한 일입니다)

...\MQL5\Scripts 폴더에서 원본을 공유할 수 있습니다.

파일:
Crash.ex5  4 kb
 
A100 :

하나의 터미널이 아닙니다(확실한지는 모르겠지만 제 생각에는 이것은 시장에서 흔한 일입니다)

...\MQL5\Scripts 폴더에서 원본을 공유할 수 있습니다.

글쎄, Win XP 32 비트 를 증명하는 데 필요한 것은 무엇입니까 ?