Vitesse d'exécution des fonctions ceil(),round(),floor() - page 8

 
Nikolai Semko:

Option pour les nombres positifs et négatifs :

Cela semble être un remplacement à part entière de ceil(), round(), floor(), qui donne un avantage de vitesse de 3 à 4 fois.

Ça a l'air plus ou moins décent. J'ai exécuté votre _round(), sans oublier de montrer la fonction compare_prices(). Donc, il y a un script qui recherche des modèles de prix, évidemment compare_prices() est appelé ici très activement. Résultats :

compare_les_prix_avec_rond_std et avec vérification de la différence de points = 13 sec
compare_les_prix_avec_rond_std et avec vérification de la différence de points désactivée = 19 sec
compare_les_prix_avec_rond_std et avec vérification de la différence de points désactivée = 15 sec
compare_les_prix_avec_rond_std et avec vérification de la différence de points activée = 13 sec


La conclusion est que la part du lion des appels dans les tâches du monde réel se termine par un contrôle dans Point. Le temps est le même (lorsque la vérification des différences au point est activée), mais la plage de travail est passée de 1,7*10^308 à environ 2*10^9 (ou ^19 si l'on utilise le long) (bien qu'un grand rond soit nécessaire comme cinquième roue dans un chariot). Je ne sais pas, peut-être utilisez-vous ces fonctions de manière exotique d'une manière ou d'une autre...

SZU :

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

mettre x entre parenthèses.

 
Si le temps CPU que vous économisez est multiplié par un milliard, même dans ce cas, il serait inférieur au temps que vous avez passé à discuter IMHO.
 
Alexey Navoykov:

On dirait que Nikolaï avait raison à propos des nerds.)

Personnellement, je n'y ai vu aucune attaque personnelle. Et vous avez beaucoup de lettres dans vos posts, mais tout est hors sujet, on a l'impression que vous argumentez juste pour le plaisir d'argumenter.


 
LRA:
Si le temps CPU que vous économisez est multiplié par un milliard, même dans ce cas, il serait inférieur au temps que vous avez passé sur la discussion IMHO.

Oui, je suis d'accord, le temps perdu est dommage - c'est un fait.

 
Nikolai Semko:

Oui, je suis d'accord, c'est une perte de temps - c'est un fait.

Alors pourquoi avez-vous écrit ici en premier lieu ? Je pensais que c'était pour la discussion, la discussion. Eh bien, ne soyez pas si déraisonnable. Mais ne vous détendez pas, vous avez tout un champ non labouré devant vous https://www.mql5.com/ru/docs/math. Bonne chance))

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

Ça a l'air plus ou moins décent. J'ai exécuté votre _round(), sans oublier de montrer la fonction compare_prices(). Ainsi, il y a un script qui recherche des modèles de prix, évidemment compare_prices() est appelé là très activement. Résultats :

La conclusion est donc que la part du lion des appels dans les tâches réelles se termine par un contrôle au Point. Le temps est le même (lorsque la vérification des différences au point est activée), tandis que la plage de travail est passée de 1,7*10^308 à environ 2*10^9 (ou ^19 si l'on utilise une longue) (bien qu'un gros rond soit nécessaire comme cinquième roue d'un chariot). Je ne sais pas, peut-être utilisez-vous ces fonctions de manière exotique d'une manière ou d'une autre...

ZS :

Mettez x entre parenthèses.


Je n'ai pas pu comprendre - dans quels cas est-il nécessaire d'utiliser cette fonction: ?

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

pourquoi ne pas utilisersimplement if (first>second), ou si vous avez besoin d'un résultat (0,1 ou 2) :

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

Parce que vous n'avez pas besoin de fonctions d'arrondi ici.

Ou c'est juste pour un test ?

 
Nikolai Semko:

Non, c'est une vraie fonction. Par souci d'intérêt, je l'ai adapté à mon travail. Nikolaï, eh bien, je comprends qu'il n'y a pas besoin de discuter. Je vais en rester là.

 
pavlick_:

Non, c'est une vraie fonction. Par souci d'intérêt, je l'ai mis dans mes travaux. Nikolaï, eh bien, je comprends qu'il n'y a pas besoin de discuter. Je vais en rester là.

pavlick_:

Alors pourquoi avez-vous écrit ici ? Je pensais que c'était pour la discussion, j'en discute. Eh bien, ne soyez pas si déraisonnable. Mais vous ne vous détendez pas, devant vous, tout un champ non labouré https://www.mql5.com/ru/docs/math. Bonne chance.)

:) Ce que je voulais dire, c'est qu'il est dommage de perdre du temps sur la "clarification des relations", malheureusement dans ce fil, elle a eu lieu. Il n'y a pas de perte de temps pour une discussion constructive.
Raison: