Alternative Implementierungen von Standardfunktionen/-ansätzen - Seite 6

 
fxsaber:

Auch die Analoga sind in ihrer Leistung sehr unterschiedlich. Die Zahl derer, die sie schreiben oder finden können, ist geringer als ein Prozentsatz der Nutzer.

Nun, das liegt daran, dass der Rest der Leute mit der vorhandenen Leistung zufrieden ist. Ehrlich gesagt sind die meisten dieser Geschwindigkeitssteigerungen nur in isolierten Testmessungen spürbar.

Natürlich behaupte ich nicht, dass wir nach Perfektion streben sollten, aber es ist besser, dies in der Reihenfolge der Prioritäten zu tun.

 
Alexey Navoykov:

Denn andere Leute sind mit der vorhandenen Leistung durchaus zufrieden. Schließlich sind die meisten dieser Geschwindigkeitssteigerungen nur in einzelnen Testmessungen spürbar.

Selbst eine Steigerung der Optimierung um 1 % führt zu spürbaren Ergebnissen.

Ich behaupte nicht, dass man nach Perfektion streben sollte, aber es ist ratsam, dies in der Reihenfolge der Prioritäten zu tun.

Für MQ sind Sie weniger interessant als das ganze Heer der MT4-Schlaumeier, die aus verschiedenen Gründen nicht auf 5 umgestiegen sind.

 
Библиотеки: 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...
Dateien:
iBars.mqh  14 kb
 

Schnellere Analoga der Standardfunktionen ceil(), floor(),round()

2-2,5facher Geschwindigkeitsvorteil

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

Ergebnisse des Korrektheits- und Geschwindigkeitstests:

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
Die Standardfunktionen geben den Typ double zurück. Aber ich habe es nicht wiederholt, weil ich nicht verstehe, warum gerundete Funktionen den Typ double benötigen.
Dateien:
TestRound.mq5  5 kb
 
Nikolai Semko:

die Ergebnisse des Korrektheits- und Geschwindigkeitstests:

Nur nicht nano, sondern miles.

 
fxsaber:

Nur sind sie nicht nano, sondern miles.

Kein Nano. 1000000 Durchläufe, und ich teile es durch 1000.
Nur sind sie noch schneller, da sie zusammen mit dem gesamten Inhalt des Schleifendurchlaufs gezählt werden. Ich werde mich in 3 Stunden an meinen Computer setzen und die Laufzeitberechnung für rein diese Funktionen korrigieren.
 
Nikolai Semko:
Kein Nano. 1000000 Durchläufe, und ich teile es durch 1000.
Eine zweideutige Interpretation also. Es wurde beschlossen, die Zykluszeit und nicht die durchschnittliche Zeit pro Funktionsaufruf auszugeben.
 
fxsaber:
Eine zweideutige Auslegung also. Es wurde beschlossen, die Zykluszeit und nicht die durchschnittliche Zeit eines Funktionsaufrufs auszugeben.
Ja, diese Zeit beinhaltet noch die Zeit für drei Ergänzungen und eine Kontrolle.
Ich bringe es in Ordnung, denn ich weiß, wie. Der Gewinn wird also noch größer sein.
 
Nikolai Semko:
Die Standardfunktionen geben den Typ double zurück. Aber ich habe es nicht wiederholt, weil ich nicht verstehe, warum gerundete Funktionen den Typ double benötigen.

Weil die Umwandlung von Double in Integer (auf diese Weise) beschissener Code ist. Round with friends ist nicht dafür gedacht, Ganzzahlen aus Fließkommazahlen zu gewinnen.