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

 
Hayır, yine de yanılmışım. FastLog2, Optimize=1 ile gerçekten daha hızlı. Mucizeler... ++ ile check-up yaptırmak gerekiyor.
 
Alexey Navoykov :

Bu arada, yaklaşık sıfır. FastLog2'de sıfır kontrolü yoktur, bu da buna göre avantajlı bir başlangıç sağlar. Ancak, doğru bir şekilde test edilirse, yine de log2'den bir buçuk ila iki kat daha yavaştır)

Ve yanlışlık nedir?

Sonuçta, test sürümünüz bile şunları üretir:

 2019.01 . 05 04 : 43 : 12.372 TestLog (EURUSD,H1)     Result log2:       sum= 1400005128   time= 297 ms
2019.01 . 05 04 : 43 : 12.635 TestLog (EURUSD,H1)     Result log2_:      sum= 1400018381   time= 262 ms
2019.01 . 05 04 : 43 : 12.809 TestLog (EURUSD,H1)     Result _FastLog2:  sum= 1400004095   time= 174 ms
 
Alexey Navoykov :

Bu arada, yaklaşık sıfır. FastLog2'de sıfır kontrolü yoktur, bu da buna göre avantajlı bir başlangıç sağlar. Ancak, doğru bir şekilde test edilirse, yine de log2'den bir buçuk ila iki kat daha yavaştır)

Hayır, elbette, boş denetim log2'den kaldırılmalı veya aynısı FastLog2'ye eklenmelidir.

Soru, gerçekten de, hesaplama bölümünün hızında. log2'de her şey saf kaymalar ve eklemeler olarak sayılır. FastLog2'de - çarpmanın dahil olduğu zorlu dönüşümlerden sonra bir tablo değeri kullanıldı. Bu kod çok eski, matematiksel yardımcı işlemcilerin olduğu günlerde kullanılıyordu, o zamandan beri durum tamamen değişebilirdi.

 
C++ ile kontrol edildi. Evet, FastLog2 gerçekten en hızlısı çalışıyor. Bu gerçekten zor bir kod) Belki de nedeni, bit işlemlerinin karşılaştırma işlemlerinden çok daha hızlı olmasıdır.
 
MT4'teki tüm kodları kontrol ettim. MT4'te derleyici optimize etmez (yani, toplamlı değişken, toplamsız orijinal değişkenimle aynı göreli sonuçları gösterir) ve MT4'te log2, FastLog2'den daha hızlıdır. Ve MT5'te optimizasyon zaten toplama yapılmadan gerçekleştirilir (yani kod görünüşte tam olarak yürütülmez) ve FastLog2 seçeneği log2'den daha hızlı çalışır. Bundan hangi özel sonuçların çıkarılabileceğini bilmiyorum, çünkü kod iyileştiricinin orada ve orada nasıl çalıştığına dair hiçbir ayrıntı yok.
 
void f(){
   static int a[]; 
   Print ( "a[]=" , ArraySize (a)); 
   ArrayResize (a, 100 ); 
   Print ( "a[]=" , ArraySize (a));}


class A
 {
public : A(){ f(); }
 };
 
A _a;

void OnStart ()
  {

  }


 
Ilya Malev :

Bu, MQL5'in standart davranışıdır: statik değişkenler, global olanlardan sonra çalışmaya başlar.

Bu konuda çok ciddi olabilirsiniz.
 
fxsaber :

Bu, MQL5'in standart davranışıdır: statik değişkenler, global olanlardan sonra çalışmaya başlar.

Her statik sınıf/yapı değişkeninin yapının kendisinden sonra ikinci kez bildirilmesinin nedeni bu mu? Üstelik herhangi bir değer atamadan bile... Belki de derleyicinin tüm bunları otomatik olarak yapması için bir öneride bulunmaya değer mi?

 

Aslında, bu bir hatadır, program kodunun yürütme sırasının ihlalidir. Derleyici prensipte buna izin vermemelidir. Geliştiricileri bu konuda daha sık çekmemiz gerekiyor.

C++'da kod, derleyici tarafından kesinlikle yukarıdan aşağıya işlenir, bu nedenle yukarıdan her şey zaten başlatılmıştır. Ve dibe gidemezsin. Bu nedenle, her şey açıktır. Ve geliştiriciler burada kendilerine ait bazı kurallar koyduklarından, doğru kod yürütme sırasını sağlamalarına izin verin.

 
Alexey Navoykov :

C++'da kod, derleyici tarafından kesinlikle yukarıdan aşağıya işlenir, bu nedenle yukarıdan her şey zaten başlatılmıştır. Ve dibe gidemezsin. Bu nedenle, her şey açıktır.

Daha az esneklik.