Eine Gleitkommadivision, eine Gleitkommaddition, eine Konvertierung nach int, ein Funktionsaufruf (copy, jump, return = 3,) * 2, alles mal zwei. (18) Und das unter der Annahme, dass Dividieren und Konvertieren mit den anderen Operationen gleichwertig sind - das sind sie nicht.
gegen
if (MathAbs(a - b) > Point / 2.)
eine Subtraktion, ein Test, 1/2 Negieren (im Durchschnitt) und Vergleich. (3 1/2, wenn point/2 in init durchgeführt wird und ABS durch ein IF ersetzt wird)
Die Dinge nicht zu sehr verkomplizieren
Könnte bei Gleichheit aufgrund von Abrundungen ausgelöst werden
if (a > b)
a ist definitiv größer als b
if (a - b > Point / 2.)
Könnte ausgelöst werden, wenn a aufgrund von Abrundung kleiner als b ist
if (a >= b)
a ist definitiv >= b
if (a - b > -Point/2.)
if (a > b -Point/2.)
if (a +Point/2. > b)
Eine fließende Division, fließende Addition, Umwandlung in int, Funktionsaufruf (copy, jump, return = 3,) * 2 mal zwei. (18) Und das unter der Annahme, dass Dividieren und Konvertieren mit den anderen Operationen gleichwertig sind - das sind sie nicht.
gegen
eine Subtraktion, ein Test, 1/2 Negieren (im Durchschnitt) und Vergleich. (3 1/2, wenn point/2 in init durchgeführt wird und ABS durch ein IF ersetzt wird)
Die Dinge nicht zu sehr verkomplizieren
2013.04.03 17:39:12 TestSpeed-CompareDbls USDJPY,M5: MathAbs(a - b) 9000000 mal in 266 ms.
2013.04.03 17:39:11 TestSpeed-CompareDbls USDJPY,M5: ConvertToPoints 9000000 mal in 1887 ms.
2013.04.03 17:46:02 TestSpeed-CompareDbls USDJPY,M5: Flat(price) 9000000 mal in 3604 ms.
"MathAbs(a-b)"-Methode ist ca. 7 mal schneller als ConvertToPoints() und fast 14 mal schneller als meine "Flat()"-Methode
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Viel Rechenarbeit anstelle der einfachen Lösung
Ich bin zu dieser Lösung gekommen, die Doubles in Ints umwandelt, um Doubles zu vergleichen. . .
Auch ich habe eine kreative Lösung gefunden, die mir (bisher) beim Vergleich von Preisen geholfen hat:
Ich skaliere den Preis zu einem int, der den Preis in Punkten als ganze Zahl ausdrückt:
kann niemals wahr sein.
IstCompareDoubles() aus stdlib.mq4 für diese Diskussion disqualifiziert? Für mich funktioniert es gut, wenn es für den Preis verwendet wird.
Eine Gleitkommadivision, eine Gleitkommaddition, eine Konvertierung nach int, ein Funktionsaufruf (copy, jump, return = 3,) * 2, alles mal zwei. (18) Und das unter der Annahme, dass Dividieren und Konvertieren mit den anderen Operationen gleichwertig sind - das sind sie nicht.
gegen
eine Subtraktion, ein Test, 1/2 Negieren (im Durchschnitt) und Vergleich. (3 1/2, wenn point/2 in init durchgeführt wird und ABS durch ein IF ersetzt wird)
Die Dinge nicht zu sehr verkomplizieren
if (a > b)if (a >= b)if (a != b)Eine fließende Division, fließende Addition, Umwandlung in int, Funktionsaufruf (copy, jump, return = 3,) * 2 mal zwei. (18) Und das unter der Annahme, dass Dividieren und Konvertieren mit den anderen Operationen gleichwertig sind - das sind sie nicht.
gegen
eine Subtraktion, ein Test, 1/2 Negieren (im Durchschnitt) und Vergleich. (3 1/2, wenn point/2 in init durchgeführt wird und ABS durch ein IF ersetzt wird)
Die Dinge nicht zu sehr verkomplizieren
2013.04.03 17:39:11 TestSpeed-CompareDbls USDJPY,M5: ConvertToPoints 9000000 mal in 1887 ms.
2013.04.03 17:46:02 TestSpeed-CompareDbls USDJPY,M5: Flat(price) 9000000 mal in 3604 ms.
"MathAbs(a-b)"-Methode ist ca. 7 mal schneller als ConvertToPoints() und fast 14 mal schneller als meine "Flat()"-Methode
2013.04.04 14:27:38 TestSpeed-CompareDbls EURUSD,H4: MathAbs(a - b) HalfAPoint 99999999 mal in 3403 ms.
2013.04.04 14:27:42 TestSpeed-CompareDbls EURUSD,H4: (intRecord > intCheck) 99999999 mal in 2505 ms.
Aber die 3. kann nicht praktikabel sein, und die 2. (intRecord > intCheck) hatte 1 Zuordnung mehr innerhalb für die intCheck vor dem Vergleich.
Ich habe getestet (intRecord > Preis/Punkt) und
2013.04.04 14:27:38 TestSpeed-CompareDbls EURUSD,H4: MathAbs(a - b) HalfAPoint 99999999 mal in 3403 ms.
2013.04.04 14:27:42 TestSpeed-CompareDbls EURUSD,H4: (intRecord > intCheck) 99999999 mal in 2505 ms.
Aber die 3. kann nicht praktikabel sein, und die 2. (intRecord > intCheck) hatte 1 Zuordnung mehr innerhalb für die intCheck vor dem Vergleich.