Implémentations alternatives de fonctions/approches standard - page 6

 
fxsaber:

Même les analogues sont très divergents en termes de performances. Le nombre de personnes capables de les écrire ou de les trouver est inférieur à un pourcentage d'utilisateurs.

Eh bien, c'est parce que le reste des gens sont tout à fait satisfaits des performances disponibles) En fait, franchement, la plupart de ces accélérations ne sont appréciables que dans des mesures de test isolées.

Bien sûr, je ne prétends pas qu'il faille rechercher la perfection, mais il est préférable de le faire par ordre de priorité.

 
Alexey Navoykov:

Parce que d'autres personnes sont tout à fait satisfaites des performances disponibles) Après tout, la plupart de ces accélérations ne sont perceptibles que dans des mesures de test isolées.

Même un gain de 1% d'optimisation donne des résultats tangibles.

Je ne prétends certainement pas que vous devez rechercher la perfection, mais il est conseillé de le faire par ordre de priorité.

Pour MQ, vous êtes moins intéressant que l'armée entière de gars intelligents de MT4 qui, pour diverses raisons, ne sont pas passés à 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...
Dossiers :
iBars.mqh  14 kb
 

Analogues plus rapides des fonctions standard ceil(), floor(),round()

Une vitesse 2 à 2,5 fois supérieure

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; }

Résultats des tests de correction et de vitesse :

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
Les fonctions standard retournent le type double. Mais je ne l'ai pas répété car je ne comprends pas pourquoi les fonctions arrondies ont besoin du type double.
Dossiers :
TestRound.mq5  5 kb
 
Nikolai Semko:

les résultats du test d'exactitude et de vitesse :

Seulement pas nano, mais miles.

 
fxsaber:

Seulement ils ne sont pas nano, ils sont miles.

Pas de nano. 1000000 passe, et je le divise par 1000.
Seulement, ils sont encore plus rapides, car ils sont comptés ensemble avec tout le contenu de la passe de la boucle. Je vais me mettre devant mon ordinateur dans 3 heures et corriger le calcul de la durée d'exécution de toutes ces fonctions.
 
Nikolai Semko:
Pas de nano. 1000000 passe, et je le divise par 1000.
Une interprétation ambiguë donc. Nous avons décidé de publier le temps de cycle, et non le temps moyen par appel de fonction.
 
fxsaber:
Interprétation ambiguë donc. Il a été décidé d'afficher la durée du cycle, et non la durée moyenne d'un appel de fonction.
Oui, ce temps comprend encore le temps de faire trois ajouts et un contrôle.
Je vais le réparer, parce que je sais comment. Le gain sera donc encore plus important.
 
Nikolai Semko:
Les fonctions standard retournent le type double. Mais je ne l'ai pas répété car je ne comprends pas pourquoi les fonctions arrondies ont besoin du type double.

Parce que convertir un double en entier (de cette façon) est un code merdique. Round with friends n'est pas conçu pour obtenir un type entier à partir d'un type flottant.

Raison: