Hatalar, hatalar, sorular - sayfa 705

 
Yedelkin :
Ve Yazdır () işlevinin söveleriyle ilgili soru açık mı kalacak? :)
Nasıl istersen.
 
victorg :
Nasıl istersen.

TAMAM. Sonra dalma yapacağım. Bu nedenle, Print() işlevinin açıklaması, " Çift tip veri, noktadan sonra 16 ondalık basamak doğruluğuyla çıktı alınır" diyor. Aslında, Print() işlevinin biraz yuvarlatılmış veriler verdiği ortaya çıktı:

 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 Yazdır(b)= 200.0
MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))= 199,9999999999999716
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Основы языка / Типы данных / Вещественные типы (double, float) - Документация по MQL5
 
Yedelkin :

TAMAM. Sonra dalma yapacağım. Bu nedenle, Print() işlevinin açıklamasında " Çift tip veri, noktadan sonra 16 ondalık basamak doğruluğuyla çıktı alınır" yazıyor. Aslında, Print() işlevinin biraz yuvarlatılmış veriler verdiği ortaya çıktı:

ND 0 victorg2 (EURUSD,M1) 11:04:42 Yazdır(b)= 200.0

MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))= 199,9999999999999716

123.4567890123456(7>5 yani yuvarla)

Her şey açıklamaya uyuyor gibi görünüyor. Jamb nedir? Sıfırlar çıktı değil mi?
 
MetaDriver :
Her şey açıklamaya uyuyor gibi görünüyor. Jamb nedir? Sıfırlar çıktı değil mi?
Sorun, Print() işlevinin " Noktadan sonra 16 ondalık basamak kesinliği ile double türünde veri" çıktısı vermemesidir.
 
Yedelkin :
Sorun, Print() işlevinin " Noktadan sonra 16 ondalık basamak kesinliği ile double türünde veri" çıktısı vermemesidir.

Kontrol

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

Kontrol

Tembel değil, kontrol edildi.

 //+------------------------------------------------------------------+
//|                                                      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 ));
  }
//+------------------------------------------------------------------+

İlk olarak, derlerken şunu üretir: "'sayıdan' 'string' victorg2.mq5 12 22'ye örtük dönüştürme".

İkincisi,

IS 0 victorg2 (EURUSD,M1) 17:46:45 Yazdır(b)=200
PJ 0 victorg2 (EURUSD,M1) 17:46:45 Yazdır( DoubleToString (b,16))=199.9999999999999716

 

Tam format kontrolü için uygun PrintFormat fonksiyonunu kullanın:

 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
Varsayılan olarak Print, 4 ondalık basamak için normal çift yuvarlama modunu kullanır. Belgeleri güncelleyeceğiz.
Документация по MQL5: Общие функции / PrintFormat
Документация по MQL5: Общие функции / PrintFormat
  • www.mql5.com
Общие функции / PrintFormat - Документация по MQL5
 

Lütfen yapılara (tercihen statik olanlar dahil dizilere) işaretçiler (tutamaçlar) verin.

Sınıflara sarmak genellikle kötü bir fikirdir:

 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(Boş) = 16
2012.04.07 20:49:38 SizeOf_Test (USDJPY,M30) sizeof(SEmpty) = 0
 
MetaDriver :

Lütfen yapılara (tercihen statik olanlar dahil dizilere) işaretçiler (tutamaçlar) verin.

Ne anlamda ve neden?

 
Renat :

1. Hangi anlamda ve

2. neden?

1.

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

Yapılara (dizilere) işaretçi dizileri oluşturmak için. Sonraki başlatma ile for(i){ S[i] = GetPointer(StaticStruct[i]); }

2. Anlamlı veri dizilerinin katı (paketlenmiş) formunu korumak.

Ham OpenCL arabelleklerine veri çıkışı ile çalışırken (veya bir DLL'ye gönderirken, dosyalara yazarken vb.)

Bu, verileri yeniden yazmadan veri erişimini (örneğin , işaretçileri sıralarken ) yeniden sıralama olasılığını korur (görünür).

Neden: