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

 
Yedelkin :
그리고 Print() 함수의 잼에 대한 질문은 열려있을 것입니다? :)
당신이 원하는대로.
 
victorg :
당신이 원하는대로.

확인. 그럼 제가 가겠습니다. 그래서 Print() 함수 설명에 " Double type 데이터는 dot 뒤에 소수점 이하 16자리의 정확도로 출력된다."라고 되어 있다. 실제로 Print() 함수는 다소 반올림된 데이터를 출력하는 것으로 나타났습니다.

 void OnStart ()
  {
   double a,b;

   a= 7.0 / 200.0 ;
   b= 7.0 /a;
   Print (" Print (b)=",b);
   Print (" Print ( DoubleToString (b, 16 ))=", DoubleToString (b, 16 ));
  }

ND 0 Victorg2 (EURUSD,M1) 11:04:42 인쇄(b)= 200.0
MP 0 Victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))= 199.999999999999716
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Основы языка / Типы данных / Вещественные типы (double, float) - Документация по MQL5
 
Yedelkin :

확인. 그럼 제가 가겠습니다. 그래서 Print() 함수 설명에 " Double type 데이터는 dot 뒤에 소수점 이하 16자리의 정확도로 출력된다."라고 되어 있다. 실제로 Print() 함수는 다소 반올림된 데이터를 출력하는 것으로 나타났습니다.

ND 0 Victorg2 (EURUSD,M1) 11:04:42 인쇄(b)= 200.0

MP 0 Victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))= 199.999999999999716

123.4567890123456(7>5 그래서 반올림)

모든 것이 설명과 일치하는 것 같습니다. 잼이 뭔가요? 0이 출력되지 않습니까?
 
MetaDriver :
모든 것이 설명과 일치하는 것 같습니다. 잼이 뭔가요? 0이 출력되지 않습니까?
문제는 Print() 함수가 " 점 뒤 의 16 자리 소수점 이하 자릿수를 가진 double 형식의 데이터"를 출력하지 않는다는 것입니다.
 
Yedelkin :
문제는 Print() 함수가 " 점 뒤 의 16 자리 소수점 이하 자릿수를 가진 double 형식의 데이터"를 출력하지 않는다는 것입니다.

확인하다

 Print (" Print (b)=" + b);
 
sergeev :

확인하다

게으르지 않고 확인되었습니다.

 //+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
void OnStart ()
  {
   double a,b;
   a= 7.0 / 200.0 ;
   b= 7.0 /a;
   //Print("Print(b)=",b);
   Print ( "Print(b)=" +b);
   Print ( "Print(DoubleToString(b,16))=" , DoubleToString (b, 16 ));
  }
//+------------------------------------------------------------------+

첫째, 컴파일할 때 "'숫자'에서 '문자열'로의 암시적 변환 Victorg2.mq5 12 22"가 생성됩니다.

둘째,

IS 0 Victorg2 (EURUSD,M1) 17:46:45 Print(b)=200
PJ 0 Victorg2 (EURUSD,M1) 17:46:45 Print( DoubleToString (b,16))=199.999999999999716

 

전체 형식 제어의 경우 적절한 PrintFormat 함수 를 사용하십시오.

 void OnStart ()
  {
   double a,b;
   a= 7.0 / 200.0 ;
   b= 7.0 /a;
   printf ( "Format: %.15lf" ,b);
   PrintFormat ( "Format: %.15lf" ,b);
  }

Format: 199.999999999999970
Format: 199.999999999999970
기본적으로 인쇄는 일반 이중 반올림 모드를 소수점 이하 4자리까지 사용합니다. 문서를 업데이트하겠습니다.
Документация по MQL5: Общие функции / PrintFormat
Документация по MQL5: Общие функции / PrintFormat
  • www.mql5.com
Общие функции / PrintFormat - Документация по MQL5
 

구조체에 대한 포인터(핸들)를 제공하십시오(정적 배열을 포함하는 배열이 선호됨).

클래스를 래핑하는 것은 종종 나쁜 생각입니다.

 struct SEmpty
  {
  };
  
class CEmpty
  {
  };
void OnStart ()
  {
   Print ( "sizeof(SEmpty) = " , sizeof (SEmpty));   
   Print ( "sizeof(CEmpty) = " , sizeof (CEmpty));
  }
2012.04.07 20:49:38 SizeOf_Test (USDJPY,M30) sizeof(CEempty) = 16
2012.04.07 20:49:38 SizeOf_Test (USDJPY,M30) sizeof(SEmpty) = 0
 
MetaDriver :

구조체에 대한 포인터(핸들)를 제공하십시오(정적 배열을 포함하는 배열이 선호됨).

어떤 의미에서 그리고 왜?

 
Renat :

1. 어떤 의미에서 그리고

2. 왜?

하나.

CEmpty  *C[];  // Это работает.
SEmpty  *S[];   // Error : 'SEmpty' - class type expected SizeOf_Test.mq5 19      1

구조(배열)에 대한 포인터 배열을 생성합니다. 후속 초기화 for(i){ S[i] = GetPointer(StaticStruct[i]); }

2. 의미 있는 데이터 배열의 견고한(포장된) 형태를 유지합니다.

원시 OpenCL 버퍼에 대한 데이터 출력으로 작업할 때 중요합니다(또는 DLL로 보내기, 파일에 쓰기 등).

이것은 데이터를 다시 쓰지 않고 데이터 액세스를 재정렬할 가능성(예: 포인터 를 정렬할 때 )을 유지(나타납니다)합니다.