ceil(), round(), floor() fonksiyonlarının yürütme hızı - sayfa 8

 
Nikolai Semko :

Pozitif ve negatif sayılar için varyant:

Bu, 3-4 kat hız artışı sağlayan ceil(), round(), floor() işlevlerinin tam teşekküllü bir ikamesi için zaten bir uygulama gibi görünüyor.

Az ya da çok iyi görünüyor. _round() işlevini çalıştırdım, karşılaştırma_prices() işlevini gösterdiğimi unutmayın. Yani, fiyat modellerini arayan bir betik var, orada karşılaştırma_fiyatları() çok aktif olarak çağrıldığı açık. Sonuçlar:

std yuvarlak ile karşılaştırma_fiyatları ve Noktadaki farkı kontrol edin = 13 sn
std yuvarlak ve devre dışı bırakılmış karşılaştırmalı fiyatlar Noktadaki farkı kontrol edin = 19 sn
_round'unuzla ve Point = 15 sn'de fark kontrolü devre dışı bırakılmış durumdayken karşılaştırma fiyatları
_round ile karşılaştırın ve Noktadaki farklılıkları kontrol edin = 13 sn


Sonuç gönderilir - gerçek görevlerdeki çağrıların aslan kısmı, Point'in kontrol edilmesiyle sona erer. Zaman aynıdır (Noktadaki fark kontrolü etkinken) ve çalışma aralığı 1,7 * 10^308'den yaklaşık 2 * 10^9'a (iyi veya uzunsa ^19) düştü (büyük olmasına rağmen). derece, arabanın beşinci tekerleği olarak yuvarlak gereklidir). Bilmiyorum, belki bu işlevleri bir şekilde egzotik kullanırsın ...

not:

 Alert ( _ceil(- 1 + DBL_EPSILON ) );   // 2.220446049250313e-16

x'i parantez içine alın.

 
Tasarruf ettiğiniz işlemci süresi bir milyar ile çarpılırsa, o zaman bile IMHO'yu tartışırken harcadığınız zamandan daha az olacaktır.
 
Alexey Navoykov :

Görünüşe göre Nikolai delikler konusunda haklıydı))

Burada şahsen ben hiçbir yerde kişiye geçiş görmedim. Ve gönderilerinizde gerçekten çok fazla mektup var, ancak her şey bir şekilde konu dışı, sadece tartışmak için tartışıyormuşsunuz gibi geliyor.


 
LRA :
Tasarruf ettiğiniz işlemci süresi bir milyar ile çarpılırsa, o zaman bile IMHO'yu tartışırken harcadığınız zamandan daha az olacaktır.

Evet, katılıyorum, harcanan zamana yazık - bir gerçek.

 
Nikolai Semko :

Evet, katılıyorum, harcanan zamana yazık - bir gerçek.

O zaman neden buraya yazdın? Tartışmak için düşündüm, tartışırım. Pekala, bu kadar kısa olmak zorunda değilsin. Ama gevşemeyin, önünüzde sürülmemiş koca bir tarla var https://www.mql5.com/en/docs/math . İyi şanlar ))

Документация по MQL5: Математические функции
Документация по MQL5: Математические функции
  • www.mql5.com
Математические функции - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
pavlick_ :

Az ya da çok iyi görünüyor. _round() işlevini çalıştırdım, karşılaştırma_prices() işlevini gösterdiğimi unutmayın. Yani, fiyat modellerini arayan bir betik var, orada karşılaştırma_fiyatları() çok aktif olarak çağrıldığı açık. Sonuçlar:

Sonuç gönderilir - gerçek görevlerdeki çağrıların aslan kısmı, Noktayı kontrol ederek sona erer. Zaman aynıdır (Noktadaki fark kontrolü etkinken) ve çalışma aralığı 1,7 * 10^308'den yaklaşık 2 * 10^9'a (iyi, veya uzunsa ^19) (büyük olmasına rağmen) derece, arabanın beşinci tekerleği olarak yuvarlak gereklidir). Bilmiyorum, belki bu işlevleri bir şekilde egzotik kullanırsın ...

not:

x'i parantez içine alın.


Anlayamadım - hangi durumlarda bu işlevi kullanmaya ihtiyaç var:?

 // 0 - first is greater than second
// 1 - equal
// 2 - second is greater than first
uchar compare_prices( double first, double second)
{
   if (first - second >= _Point )
       return 0 ;
   if (second - first >= _Point )
       return 2 ;

   first = round (first/ _Point );
   second = round (second/ _Point );
   
   if (first > second)
       return 0 ;
   if (first < second)
       return 2 ;
   return 1 ;
}

neden sadece if (birinci>saniye) kullanmıyorsunuz veya sonucu (0,1 veya 2) istiyorsanız:

 #define _compare_prices(f,s) (f>s)? 0 :(f<s)? 2 : 1 ;

çünkü yuvarlama işlevlerine gerek yoktur.

Yoksa sadece test için mi?

 
Nikolai Semko :

Hayır, bu gerçek bir özellik. İlgi uğruna, gelişmelerimde ikame ettim. Nikolai, tartışmaya gerek olmadığını anladım. Bununla bitireceğim.

 
pavlick_ :

Hayır, bu gerçek bir özellik. İlgi uğruna, gelişmelerimde ikame ettim. Nikolai, tartışmaya gerek olmadığını anladım. Bununla bitireceğim.

pavlick_ :

O zaman neden buraya yazdın? Tartışmak için düşündüm, tartışırım. Pekala, bu kadar kısa olmak zorunda değilsin. Ama gevşemeyin, önünüzde sürülmemiş koca bir tarla var https://www.mql5.com/en/docs/math . İyi şanlar ))

:) "Göstermek" için harcanan zamana yazık demek istedim, maalesef bu başlıkta da yer aldı. Yapıcı tartışma için zaman yok.