Bis jetzt verstehe ich, dass ich den Code mit Ihrer optimierten (!) Funktion ersetzen sollte, dann setzen Sie eine große Warnung für Benutzer zu deaktivieren Compiler-Optimierungen vor der Verwendung der Bibliothek, um die gleiche Leistung zu erhalten, die sie ohne die Verwendung von all dieser Scheiße bekommen würde!
amrali #: Bis jetzt habe ich verstanden, dass ich den Code durch Ihre optimierte (!) Funktion ersetzen und dann eine große Warnung für die Benutzer einfügen sollte, die Compiler-Optimierungen zu deaktivieren, bevor sie die Bibliothek verwenden, um die gleiche Leistung zu erhalten, die sie ohne diesen ganzen Mist erhalten würden!
Wenn Sie tatsächlich herausfinden wollen, wie man die Leistung von Funktionen korrekt misst, gehen Sie ins russischsprachige Forum und fragen Sie dort. Die Entwickler haben darüber ausführlich mit Beispielen gesprochen. Ich habe keine Links.
//+------------------------------------------------------------------+//| Anzahl der übereinstimmenden Nachkommastellen ermitteln |//| Punkt zweier Zahlen. GetEqualDigits(3.124, 3.122) => 2 |//+------------------------------------------------------------------+int GetEqualDigits(constdouble a, constdouble b);
//+------------------------------------------------------------------+//| Ermittelt die Anzahl der signifikanten Ziffern, die zwischen zwei Zahlen übereinstimmen.//| Zum Beispiel: GetEqualSignificantDigits(3.124, 3.122) => 3 |//+------------------------------------------------------------------+int GetEqualSignificantDigits(constdouble a, constdouble b);
Diverse Funktionen hinzugefügt:
//+------------------------------------------------------------------+//| Anzahl der signifikanten Ziffern ermitteln. Signifikante Ziffern oder Zahlen |//| ist die Summe der ganzzahligen und dezimalen Ziffern (links und rechts vom |//| Dezimalpunkt), ohne führende und nachfolgende Nullen.//| Die Zahl 1,23 hat zum Beispiel 2 Nachkommastellen und 3 Nachkommastellen.//| Tipp: Ändern Sie die Zahl in wissenschaftliche Notation. Das ist einfacher zu sehen. |//+------------------------------------------------------------------+int GetSignificantDigits(doublevalue);
//+------------------------------------------------------------------+//| Gibt den Exponenten der wissenschaftlichen Schreibweise einer Zahl zurück.//| In wissenschaftlicher Notation wird eine Zahl in eine Dezimalzahl umgewandelt.//| zwischen 1,0 und 10, multipliziert mit einer Potenz von 10.//| Es berechnet die Verschiebung des Dezimalpunktes, um nur einen Nicht-Nullpunkt zu behalten.//| Stelle vor dem Dezimalkomma.|//+------------------------------------------------------------------+int GetExponent10(constdoublevalue)l
//+------------------------------------------------------------------+//| Berechnet das Vorzeichen eines Wertes als 1, 0, -1 |//+------------------------------------------------------------------+double MathSign(constdoublevalue);
Funktion zur Formatierung von Doubles zu String hinzugefügt:
//+------------------------------------------------------------------+//| Umwandlung eines numerischen Wertes in eine Zeichenkette in wissenschaftlicher Notation |//| mit einer Stelle vor dem Dezimalpunkt (z.B. 6,22e-23).//| Ziffern : Optional. Die Anzahl der Stellen nach dem Dezimalkomma. |//| Standardmäßig so viele Ziffern wie nötig, um den Wert darzustellen.//+------------------------------------------------------------------+string DoubleToExponential(constdoublevalue, int digits = -1);
//+------------------------------------------------------------------+//| Gibt pow(10, (int)power) zurück, verwendet schnelle Nachschlagetabelle für Potenzen.//| https://github.com/php/php-src/blob/master/ext/standard/math |//+------------------------------------------------------------------+double GetPower10(constint power);
Die Funktion hat eine viel schnellere Leistung als MathPow(10, power).
//+------------------------------------------------------------------+//| Gibt pow(10, (int)power) zurück, verwendet schnelle Nachschlagetabelle für Potenzen.//+------------------------------------------------------------------+double GetPower10(constint power);
Die Funktion hat eine viel schnellere Leistung als MathPow(10, power).
//+------------------------------------------------------------------+//| Einen Wert zwischen min (einschließlich) und max (ausschließlich) einschließen.//+------------------------------------------------------------------+template<typename T>
T Wrap(const T value, const T min, const T max);
Umbenennung der Rundungsfunktionen in Ceil(), Floor(), Round() und Trunc(), um Namenskonflikte mit <Math\Stat\Math.mqh> zu vermeiden.
Die Funktion GetDigits() wurde korrigiert, um in seltenen Situationen eine Endlosschleife zu vermeiden.
Dies sind drei praktische Funktionen für den Vergleich und die Rundung von Fließkommazahlen und die Formatierung von Geld:
1. `bool DoubleEquals(double x, double y, double eps)` vergleicht zwei Double-Werte `x` und `y` mit einem gegebenen Epsilon-Wert `eps` und gibt einen boolschen Wert zurück, der angibt, ob sie innerhalb der gegebenen Toleranz gleich sind.
2. `double RoundTo(double value, int digits)` rundet einen double-Wert `value` auf die angegebene Anzahl von Dezimalstellen `digits`.
3. `string FormatMoney(double amount)` formatiert einen Double-Wert `amount` als String, der einen Währungsbetrag darstellt. Er formatiert den Betrag mit zwei Dezimalstellen, ersetzt den Dezimalpunkt durch ein Komma und fügt alle drei Stellen Leerzeichen ein, um die Lesbarkeit zu verbessern. Außerdem wird am Ende das Währungssymbol aus `AccountInfoString(ACCOUNT_CURRENCY)` eingefügt.
DoubleEquals(double x, double y, double eps) - Diese Funktion vergleicht zwei Double-Werte x und y mit einer Toleranz eps . Sie gibt true zurück, wenn x innerhalb von eps von y liegt. Dies ist nützlich für den Vergleich von Fließkommazahlen, die aufgrund von Rundungsfehlern nicht exakt gleich sind.
RoundTo(double value, int digits) - Diese Funktion rundet einen double-Wert auf eine bestimmte Anzahl von Dezimalstellen. Sie verwendet die Funktion MathRound(), um die Rundung durchzuführen.
FormatMoney(double amount) - Diese Funktion formatiert einen Double-Wert als String mit Währungssymbolen, Kommas als Tausendertrennzeichen und zwei Dezimalstellen. Sie ist nützlich, um Geldwerte benutzerfreundlich darzustellen.
string FormatMoney(double amount) {
string currency = AccountInfoString(ACCOUNT_CURRENCY);
string formatted = StringFormat("%.2f", amount);
formatted = StringReplace(formatted, ".", ",");
int len = StringLen(formatted);
for (int i = len - 6; i > 0; i -= 3) {
formatted = StringSubstr(formatted, 0, i) + " " + StringSubstr(formatted, i);
}
return formatted + " " + currency;
}
fxsaber #:
Sie müssen lernen, wie man richtige Leistungsmessungen durchführt.
Sie ziehen falsche Schlüsse.
Leider verstehen Sie nicht, was Sie da messen.
Sagen Sie mir also bitte, was ich nicht verstehe :-)
Bis jetzt habe ich verstanden, dass ich den Code durch Ihre optimierte (!) Funktion ersetzen und dann eine große Warnung für die Benutzer einfügen sollte, die Compiler-Optimierungen zu deaktivieren, bevor sie die Bibliothek verwenden, um die gleiche Leistung zu erhalten, die sie ohne diesen ganzen Mist erhalten würden!
Wenn Sie tatsächlich herausfinden wollen, wie man die Leistung von Funktionen korrekt misst, gehen Sie ins russischsprachige Forum und fragen Sie dort. Die Entwickler haben darüber ausführlich mit Beispielen gesprochen. Ich habe keine Links.
Aktualisierung 1. März 2023
Funktionen zum Vergleich von Doubles hinzugefügt:
Diverse Funktionen hinzugefügt:
Funktion zur Formatierung von Doubles zu String hinzugefügt:
Neue Funktion "Verschiedenes" hinzugefügt.
Die Funktion hat eine viel schnellere Leistung als MathPow(10, power).
Schneller.
@fxsaber Danke!
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Bibliotheken: Math Utils
amrali, 2023.03.08 15:32
Neue Funktion miscellaneous hinzugefügt.
Die Funktion hat eine viel schnellere Leistung als MathPow(10, power).
Schnellere Rundungsfunktionen hinzugefügt.
Aktualisierung 24. April 2023
Neue Funktion hinzugefügt:
Umbenennung der Rundungsfunktionen in Ceil(), Floor(), Round() und Trunc(), um Namenskonflikte mit <Math\Stat\Math.mqh> zu vermeiden.
Die Funktion GetDigits() wurde korrigiert, um in seltenen Situationen eine Endlosschleife zu vermeiden.
3. `string FormatMoney(double amount)` formatiert einen Double-Wert `amount` als String, der einen Währungsbetrag darstellt. Er formatiert den Betrag mit zwei Dezimalstellen, ersetzt den Dezimalpunkt durch ein Komma und fügt alle drei Stellen Leerzeichen ein, um die Lesbarkeit zu verbessern. Außerdem wird am Ende das Währungssymbol aus `AccountInfoString(ACCOUNT_CURRENCY)` eingefügt.
Beitrag formatiert von Moderator