Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 137

 
Alexey Navoykov :
Aritmetik işlemlerle ilgili değil gibi görünüyor, çünkü orada değiller, derleme aşamasında tüm değerler hesaplanır. Bunun nedeni, bilinmeyen sayıda yinelemeli bir döngünün varlığıdır (bu yinelemeler ortalama olarak ikiden az olmasına rağmen). Böylece kodunuz, bilinen sayıda Rand() çağrısı ile bir şekilde optimize edilir.

https://www.mql5.com/en/forum/308881/page3#comment_11222192

 
Vict :

İşlemci geliştiricilerinin nesi var? Jeneratör - yazılım uygulandı.

Tabii ki değil. Bu jeneratör donanımda uygulanmaktadır. Programlı olarak, bu hıza ulaşılamaz - bu açıktır.

 
Nikolai Semko :

Tabii ki değil. Bu jeneratör donanımda uygulanmaktadır. Programlı olarak, bu hıza ulaşılamaz - bu açıktır.

Aslında, donanımda bir RANDOM üreteci uygularlar ve Rand () sözde rastgele bir şeydir, referans kitabında bu konuda yazılmıştır.

MatematikRand

0 ile 32767 arasında bir sözde rasgele tamsayı döndürür.

Donanıma pek aşina değilim, ancak muhtemelen hayal kırıklığına uğrayacaksınız - çok hızlı çalışmıyor gibi görünüyor, yalnızca sözde rastgelelik için bir tohum olarak iyi.
 
Vict :

Aslında, donanımda bir RANDOM üreteci uygularlar ve Rand () sözde rastgele bir şeydir, referans kitabında bu konuda yazılmıştır.

Donanıma pek aşina değilim, ancak muhtemelen hayal kırıklığına uğrayacaksınız - çok hızlı çalışmıyor gibi görünüyor, yalnızca sözde rastgelelik için bir tohum olarak iyi.

kül kütüğü - sözde.

rastgele olanlar çok daha yavaştır ( https://en.wikipedia.org/wiki/RdRand )

 
Nikolai Semko :

kül kütüğü - sözde.

rastgele olanlar çok daha yavaştır ( https://en.wikipedia.org/wiki/RdRand )

Evet, sözde koydular. Ama eminim - Rand () programlı olarak uygulanmaktadır. Belki oradan geçen "kıdemli" yoldaşlardan biri bunu onaylayacaktır.

 
Vict :

Evet, sözde koydular. Ama eminim - Rand () programlı olarak uygulanmaktadır. Belki oradan geçen "kıdemli" yoldaşlardan biri bunu onaylayacaktır.

Haklı olabileceğinizi dışlamıyorum. Boş bir dakika olacak, benzer bir şey uygulamaya çalışmak gerekiyor. Bir nanosaniye içinde kalmanın mümkün olacağından şüpheli olsam da, ancak döngülerden uzaklaşmayı başarırsanız, o zaman 5 ile tanışabileceğinizi düşünüyorum.
 
Vict :

Ama eminim - Rand () programlı olarak uygulanmaktadır. Belki oradan geçen "kıdemli" yoldaşlardan biri bunu onaylayacaktır.

Evet, muhtemelen haklısın.
Rand16() işlevinin önceden rasgele sayılar üretmeye yönelik bu sürümü, orijinal işlevin iki katından daha yavaştır ve 0'dan 65535'e kadar rasgele sayılar üretir.

 ushort rand16() { return ((( ushort )rand8()<< 8 )|( ushort )rand8());}


uchar rand8()
{
     static ushort s[ 10 ] = { 0x52 , 0x8e , 0xdc , 0x61 , 0x35 , 0xbc , 0x5c , 0xb6 };
     static ushort c = 0xa6 ;
     static int i = 0 ;
     ushort t;
     uchar x;
    
    x = ( uchar )s[i];
    t = ( ushort )x  + c;
    c = t >> 8 ;
    c += x;
    x = ( uchar )t & 255 ;
    s[i] = x;
    i++;
    i=i& 7 ;
     return x;
}

onlar. 2 nanosaniyeden az.

 2019.06 . 09 23 : 52 : 15.855 TestSpeedRand (US30Index,H1)    Время формирования случайных массивов = 9068   микросекунд. Всего сгенерировано 4655770 случайных чисел rand ()
2019.06 . 09 23 : 52 : 17.892 TestSpeedRand (US30Index,H1)    Время формирования случайных массивов = 16562 микросекунд. Всего сгенерировано 4655770 случайных чисел rand16()
2019.06 . 09 23 : 52 : 19.940 TestSpeedRand (US30Index,H1)    Время формирования случайных массивов = 22299 микросекунд. Всего сгенерировано 4655770 случайных чисел get_rand()
2019.06 . 09 23 : 52 : 21.986 TestSpeedRand (US30Index,H1)    Время формирования случайных массивов = 20094 микросекунд. Всего сгенерировано 4655770 случайных чисел randUlong()
2019.06 . 09 23 : 52 : 24.020 TestSpeedRand (US30Index,H1)    Время формирования случайных массивов = 14660 микросекунд. Всего сгенерировано 4655770 случайных чисел randUint()
2019.06 . 09 23 : 52 : 26.053 TestSpeedRand (US30Index,H1)    Время формирования случайных массивов = 12543 микросекунд. Всего сгенерировано 4655770 случайных чисел randShort()
2019.06 . 09 23 : 52 : 28.095 TestSpeedRand (US30Index,H1)    Время формирования случайных массивов = 20883 микросекунд. Всего сгенерировано 4655770 случайных чисел RandomLong()
Dosyalar:
 
// Некоторые возможности структур, которых нет у классов.

// #define struct class // Смотрим ошибки, которые возникают при замене структур на классы.

struct A
{
public :  
   int i;
  
   uint Save( const int handle) { return ( FileWriteStruct (handle, this )); } // Запись себя
   uint Load( const int handle) { return ( FileReadStruct (handle, this )); }   // Чтение себя
};

// Использование в объединениях
union UNION
{
   uchar b1[ sizeof (A)];
  A b2;
};

// Выравнивание
struct pack( sizeof (A)) B : public A
{
   short j;
};

// Структура со скрытым полем
struct C : private A
{
public :  
   void Set( const int Num ) { this .i = Num; }  
   int Get( void ) const { return ( this .i); }  
};

// Структура с неизменяемым полем.
struct D
{
public :  
   const A a;
};

template < typename T1, typename T2>
void FromTo( const T1 &ValueFrom, T2 &ValueTo )
{
   uchar Bytes[];    

   StructToCharArray (ValueFrom, Bytes); // В массив байтов
   CharArrayToStruct (ValueTo, Bytes);   // Из массива байтов   
}

void OnStart ()
{
  A a[ 1 ] = { 0 };
  
   FileReadArray ( 0 , a);   // Чтение массива
   FileWriteArray ( 0 , a); // Запись массива

   ArrayCopy (a, a); // Копирование массивов
   ZeroMemory (a);   // Обнуление массивов
    
  C c; // Структура со скрытым полем
  c.Set( 7 );

  FromTo(c, a[ 0 ]);
   Print (a[ 0 ].i); // Достали значение приватного поля из C.
  
  D d; // Структура с неизменяемым полем.

  a[ 0 ].i = 5 ;
  
  FromTo(a[ 0 ], d);
   Print (d.a.i); // Изменили const-поле.     

  FromTo(a[ 0 ], c);
   Print (c.Get()); // Изменили private-поле.     
}
Ek olarak, sınıf nesnesi aynı POD yapısının nesnesinden 16 bayt daha büyüktür. Onlar. yapı dizileri daha da ekonomiktir.
 
fxsaber :
Ek olarak, sınıf nesnesi aynı POD yapısının nesnesinden 16 bayt daha büyüktür. Onlar. yapı dizileri daha da ekonomiktir.
Sınıf!
 
Alıntılanan konunun başlığındaki sorunun cevaplarından biri

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Symbol() ve _Symbol arasındaki fark nedir

fxsaber , 2019.07.07 14:47

 void Func( const string & ) {}

void OnStart ()
{
  Func( Symbol ()); // ERROR: 'Symbol' - parameter passed as reference, variable expected
  Func( _Symbol );   // OK    
}

:: olmadan bir sınıf/yapı içinde Symbol() çağrılırsa, önceden tanımlanmış bir değişkenden daha uygun olabilir, çünkü aynı adı taşıyan bir yöntem bildirerek hızlı bir değişiklik yapabilirsiniz.