Sıralı olarak bir numaralandırma üzerinde yineleme nasıl yapılır? - sayfa 4

 
fxsaber :
Standart NormalizeDouble'dan (1395 yapı) neredeyse dört kat daha hızlı ... bu, geliştiricilerin bir koltuk değneğidir.

Hangisi neredeyse 4 kat daha hızlı? Stüdyoya kod!
 
Bir şey beni de yaklaşık 4 kez şaşırtıyor ...
Ve hangi yan dizilerin veya anahtarın oraya düştüğü çok açık değil. Tamamen matematik.
 
Dmitry Fedoseev :
Hangisi neredeyse 4 kat daha hızlı? Stüdyoya kod!
Kod tabanında kaç gün kontrol edildiği bilinmiyor. Müfettiş tatilde, sanırım.
 
fxsaber :
Kod tabanında kaç gün kontrol edildiği bilinmiyor. Müfettiş tatilde, sanırım.
Görünüşe göre bugün yayınlamaya başladılar. Belki bize ulaşırlar)))
 
Ihor Herasko :
Görünüşe göre bugün yayınlamaya başladılar. Belki bize ulaşırlar)))
Size ulaşıldı. Benden önce, hayır.
 
Dmitry Fedoseev :
Hangisi neredeyse 4 kat daha hızlı? Stüdyoya kod!

https://www.mql5.com/ru/code/16169

 // Почти в четыре раза быстрее соответствующей стандартной функции (build 1395)
#define NormalizeDouble PRICE_COMPARE::MyNormalizeDouble
Price_Compare
Price_Compare
  • oylar: 1
  • 2016.08.25
  • fxsaber
  • www.mql5.com
Изящное и шустрое сравнение double-значений "цены".
 

Bu işlevi kullanırken dikkatli olun, NormalizeDouble'dan daha küçük bir değer aralığında düzgün çalışacaktır.

Neden, açıklamayacağım - kendiniz tahmin edin.

NormalizeDouble işlevi nasıl çalışır:

  1. Bütün kısım göze çarpıyor - ben
  2. Kesirli kısım vurgulanır - F
  3. F = F * 10^basamak
  4. F = F (+ veya - işarete bağlı olarak) 0,5
  5. F = (F'nin tamsayı kısmı) / 10^basamak
  6. sonuç = I + F
 
Genel olarak, hiçbir his yoktu.
 
Ilyas :

Bu işlevi kullanırken dikkatli olun, NormalizeDouble'dan daha küçük bir değer aralığında düzgün çalışacaktır.

Neden, açıklamayacağım - kendiniz tahmin edin.

NormalizeDouble işlevi nasıl çalışır:

  1. Bütün kısım göze çarpıyor - ben
  2. Kesirli kısım vurgulanır - F
  3. F = F * 10^basamak
  4. F = F (+ veya - işarete bağlı olarak) 0,5
  5. F = (F'nin tamsayı kısmı) / 10^basamak
  6. sonuç = I + F

İşlev açıklamasında bir not var

StopLoss, TakeProfit'in hesaplanan değerleri ve bekleyen emirlerin açılış fiyatları, değeri Digits() işlevi ile elde edilebilecek bir doğrulukla normalleştirilmelidir .

Bu yalnızca minimum fiyat adımı 10^N olan ve N'nin bir tam sayı olduğu ve pozitif olmadığı semboller için geçerlidir. Minimum fiyat adımı farklı bir değere sahipse, o zaman OrderSend'den önce fiyat seviyelerini normalleştirmek anlamsız bir işlemdir ve çoğu durumda OrderSend'in false döndürmesine neden olur.


Yardımdaki eski görüşleri düzeltmek güzel olurdu.

NormalizeDouble tamamen gözden düştü. Sadece yavaş bir uygulama olmakla kalmaz, aynı zamanda çeşitli değişim sembollerinde (örneğin, RTS, MIX, vb.) anlamsızdır.

Sunulan alternatif uygulamaya gelince, hem olumlu hem de olumsuz olanlar için doğruluk açısından orijinalden hiçbir şekilde daha düşük değildir. Ve yuvarlama da öyle. Sadece 4 kat daha hızlı çalışır.

 
fxsaber :

Bu yalnızca minimum fiyat adımı 10^N olan ve N'nin bir tam sayı olduğu ve pozitif olmadığı semboller için geçerlidir. Minimum fiyat adımı farklı bir değere sahipse, o zaman OrderSend'den önce fiyat seviyelerini normalleştirmek anlamsız bir işlemdir ve çoğu durumda yanlış OrderSend döndürecektir .

Neden hepsi aniden?