Geschwindigkeit der Ausführung der Funktionen ceil(),round(),floor() - Seite 8

 
Nikolai Semko:

Option für positive und negative Zahlen:

Dies scheint ein vollwertiger Ersatz für ceil(),round(),floor() zu sein, der einen 3-4fachen Geschwindigkeitsvorteil bietet.

Sieht mehr oder weniger anständig aus. Ich habe Ihre Funktion _round() ausgeführt und mich daran erinnert, die Funktion compare_prices() zu zeigen. Es gibt also ein Skript, das nach Preismustern sucht, offensichtlich wird compare_prices() dort sehr aktiv aufgerufen. Ergebnisse:

compare_prices with std round and with point difference checking = 13 sec
compare_prices with std round and with point difference checking turned off = 19 sec
compare_prices with your _round and with point difference checking turned off = 15 sec
compare_prices with your _round and with point difference checking turned on = 13 sec


Die Schlussfolgerung ist, dass der Löwenanteil der Anrufe bei realen Aufgaben bei der Überprüfung von Point endet. Die Zeit ist die gleiche (wenn die Prüfung auf Unterschiede am Punkt eingeschaltet ist), aber der Arbeitsbereich ist von 1,7*10^308 auf etwa 2*10^9 (oder ^19, wenn man lang verwendet) gesunken (obwohl eine große Runde als fünftes Rad in einem Wagen benötigt wird). Ich weiß nicht, vielleicht verwenden Sie diese Funktionen irgendwie exotisch ...

SZU:

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

x in Klammern umbrechen.

 
Selbst wenn man die eingesparte CPU-Zeit mit einer Milliarde multipliziert, wäre das weniger als die Zeit, die Sie IMHO mit Diskussionen verbracht haben.
 
Alexey Navoykov:

Es sieht so aus, als hätte Nikolai mit den Nerds recht gehabt )).

Ich persönlich habe dort keine persönlichen Angriffe gesehen. Und Sie haben viele Buchstaben in Ihren Beiträgen, aber alles ist Off-Topic, es fühlt sich an, als würden Sie nur um des Argumentierens willen argumentieren.


 
LRA:
Selbst wenn man die eingesparte CPU-Zeit mit einer Milliarde multipliziert, wäre sie IMHO geringer als die Zeit, die Sie mit der Diskussion verbracht haben.

Ja, ich stimme zu, verschwendete Zeit ist schade - Tatsache.

 
Nikolai Semko:

Ja, ich stimme zu, es ist Zeitverschwendung - das ist eine Tatsache.

Warum haben Sie dann überhaupt hier geschrieben? Ich dachte, es sei für die Diskussion gedacht. Seien Sie nicht so unvernünftig. Aber entspannen Sie sich nicht, Sie haben noch ein ganzes ungepflügtes Feld vor sich https://www.mql5.com/ru/docs/math. Viel Glück))

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

Es sieht mehr oder weniger anständig aus. Ich habe Ihre Funktion _round() ausgeführt und mich daran erinnert, die Funktion compare_prices() zu zeigen. Es gibt also ein Skript, das nach Preismodellen sucht, offensichtlich wird compare_prices() dort sehr aktiv aufgerufen. Ergebnisse:

Die Schlussfolgerung ist also, dass der Löwenanteil der Anrufe bei realen Aufgaben beim Check-in Point endet. Die Zeit ist die gleiche (wenn die Prüfung auf Unterschiede am Punkt eingeschaltet ist), während der Arbeitsbereich von 1,7*10^308 auf etwa 2*10^9 (oder ^19, wenn man lang verwendet) gesunken ist (obwohl eine große Runde als fünftes Rad eines Wagens benötigt wird). Ich weiß nicht, vielleicht verwenden Sie diese Funktionen irgendwie exotisch ...

ZS:

x in Klammern einschließen.


Ich konnte nicht verstehen, in welchen Fällen es notwendig ist, diese Funktion zu verwenden:?

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

warum nichteinfach if (erste>zweite) verwenden, oder wenn Sie ein Ergebnis (0,1 oder 2) benötigen:

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

Denn Sie brauchen hier keine Rundungsfunktionen.

Oder handelt es sich nur um einen Test?

 
Nikolai Semko:

Nein, dies ist eine echte Funktion. Nur aus Interesse habe ich es in meine Arbeit einfließen lassen. Nikolai, ich verstehe, dass es keinen Grund zur Diskussion gibt. Ich werde es dabei belassen.

 
pavlick_:

Nein, dies ist eine echte Funktion. Nur aus Interesse habe ich es in meine Berechnungen aufgenommen. Nikolai, ich verstehe, dass es keinen Grund zur Diskussion gibt. Ich werde es dabei belassen.

pavlick_:

Warum haben Sie dann überhaupt hier geschrieben? Ich dachte, es sei zur Diskussion, ich diskutiere. Seien Sie nicht so unvernünftig. Aber Sie entspannen sich nicht, vor Ihnen liegt ein ganzes ungepflügtes Feld https://www.mql5.com/ru/docs/math. Viel Glück.)

:) Was ich meinte, war, dass es schade um die Zeit ist, die mit dem "Aussortieren von Dingen" verschwendet wird, was in diesem Thread leider geschehen ist. Es wird keine Zeit für konstruktive Diskussionen verschwendet.