Implementazioni alternative di funzioni/approcci standard - pagina 6

 
fxsaber:

Anche gli analoghi sono molto diversi in termini di prestazioni. Il numero di persone che possono scriverli o trovarli è meno di una percentuale di utenti.

Beh, questo è perché il resto delle persone sono abbastanza soddisfatte delle prestazioni disponibili) In effetti, francamente parlando, la maggior parte di questi aumenti di velocità sono apprezzabili solo in misurazioni di test isolati.

Naturalmente, non sostengo che dobbiamo cercare la perfezione, ma è meglio farlo in ordine di priorità.

 
Alexey Navoykov:

Perché le altre persone sono abbastanza soddisfatte delle prestazioni disponibili) Dopotutto, la maggior parte di questi aumenti di velocità sono evidenti solo in misurazioni di test isolati.

Anche un guadagno dell'1% nell'ottimizzazione produce risultati tangibili.

Non sostengo certo che si debba tendere alla perfezione, ma è consigliabile farlo in ordine di priorità.

Per MQ sei meno interessante di tutto l'esercito di ragazzi intelligenti di MT4 che per vari motivi non sono passati alla 5.

 
Библиотеки: Fast iBarShift and Bars for MT5
Библиотеки: Fast iBarShift and Bars for MT5
  • 2018.05.04
  • www.mql5.com
Fast iBarShift and Bars for MT5: Автор: Nikolai Semko...
File:
iBars.mqh  14 kb
 

Analoghi più veloci delle funzioni standard ceil(), floor(), round()

Vantaggio di velocità di 2-2,5 volte

long Ceil (double x) { return (x-(long)x>0)?(long)x+1:(long)x; }
long Round(double x) { return (x>0)?(long)(x+0.5):(long)(x-0.5);}
long Floor(double x) { return (x>0)?(long)x:((long)x-x>0)?(long)x-1:(long)x; }

Risultati dei test di correttezza e velocità:

2018.08.25 17:23:23.199 TestRound (EURUSD,M10)  Время выполнения ceil =  3.745 наносекунд, Контрольная сумма = 5250492895
2018.08.25 17:23:23.200 TestRound (EURUSD,M10)  Время выполнения Ceil =  1.806 наносекунд, Контрольная сумма = 5250492895
2018.08.25 17:23:23.205 TestRound (EURUSD,M10)  Время выполнения floor = 4.243 наносекунд, Контрольная сумма = 5249492896
2018.08.25 17:23:23.206 TestRound (EURUSD,M10)  Время выполнения Floor = 1.621 наносекунд, Контрольная сумма = 5249492896
2018.08.25 17:23:23.209 TestRound (EURUSD,M10)  Время выполнения round = 2.984 наносекунд, Контрольная сумма = 5249992896
2018.08.25 17:23:23.211 TestRound (EURUSD,M10)  Время выполнения Round = 1.519 наносекунд, Контрольная сумма = 5249992896
Le funzioni standard restituiscono il tipo double. Ma non l'ho ripetuto perché non capisco perché le funzioni arrotondate hanno bisogno del tipo double.
File:
TestRound.mq5  5 kb
 
Nikolai Semko:

i risultati del test di correttezza e velocità:

Solo non nano, ma miglia.

 
fxsaber:

Solo che non sono nano, sono miglia.

Nessun nano. 1000000 passaggi, e lo divido per 1000.
Solo che sono ancora più veloci, poiché vengono contati insieme a tutti i contenuti del passaggio del ciclo. Arriverò al mio computer tra 3 ore e sistemerò il calcolo del tempo di esecuzione per queste funzioni.
 
Nikolai Semko:
Nessun nano. 1000000 passaggi, e lo divido per 1000.
Un'interpretazione ambigua quindi. Ho deciso di emettere il tempo di ciclo, non il tempo medio per chiamata di funzione.
 
fxsaber:
Interpretazione ambigua allora. Ha deciso di emettere il tempo di ciclo, non il tempo medio di una chiamata di funzione.
Sì, questo tempo include ancora il tempo per fare tre aggiunte e 1 controllo.
Lo aggiusterò, perché so come fare. Quindi il guadagno sarà ancora maggiore.
 
Nikolai Semko:
Le funzioni standard restituiscono il tipo double. Ma non l'ho ripetuto perché non capisco perché le funzioni arrotondate abbiano bisogno del tipo double.

Perché convertire il doppio in intero (in questo modo) è un codice di merda. Round with friends non è progettato per ottenere il tipo intero dal tipo fluttuante.