Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
WHRoeder: dieser Code gut (vor allem überprüfen "hinzugefügt" und "Standard")? Es kann auch als eine einfache letzte Referenz für diejenigen dienen, die diesen Thread besuchen und nur die letzte Seite gehen (wie ich es tat)
Dieser Code ist nicht genau.
Wie kann if( !MathAbs( a - b ) > Point/2) zum Vergleich auf Gleichheit verwendet werden? Das würde Ihnen sagen, dass 1.4999 == 1.5000
if( ! (MathAbs(1.4999 - 1.5000 > 0.00005 )
if( ! (0.0001 > 0.00005 )
if( ! (true )
if( false ) 1.4999 is NOT equal to 1.5000
Ich verwende
oder für Doppelwerte, die keine tatsächlichen Preise sind, eine höhere Genauigkeit
Raptors Beitrag über diesen Code
Wenn Sie also verwenden,
Ich habe diese Methode auf verschiedene Arten getestet und habe kein Szenario gefunden, in dem sie nicht das erwartete oder gewünschte Ergebnis liefert.Endgültiger Code... Danke WHRoeder
Und, vielleicht eine sekundäre Funktion für den Vergleich aller anderen Doubles, die keine Preise sind...
Siehe auch 'MQL4 Referenz > Grundlagen der Sprache > Datentypen > Reelle Typen (double, float)' in Bezug auf die Verwendung kleiner Zahlen für den Vergleich.
Vielleicht weiß jemand, wie man 0.00...1 besser in expon schreiben kann.
Es gibt also noch etwas Interessantes, das ich gefunden habe, möglicherweise im Zusammenhang mit "// 0 compare doesn't need this function".
Vielleicht ein Fehler nur in den neuesten Versionen, nicht sicher. Der Vergleich mit 0 funktioniert nicht mehr richtig. Ich musste auf etwas Unfreundliches zurückgreifen wie;
Ergebnis=(int(Ergebnis*100)/100.0); // Auflösung 2 Ziffern
Nur um sicherzustellen, dass 0-Werte tatsächlich als 0-Werte enden.
WHRoeder, danke. Mehr Studium nötig :)
Ich denke, dieses Thema wird mit zu viel unnötiger Komplexität behandelt.
Versuchen Sie, Ihren Programmierern das Leben immer so einfach wie möglich zu machen. Schreiben Sie Defines (oder gehen Sie mit Methoden voran, wenn Sie wirklich müssen) in den Klassen, in denen Sie Ihre Doppelvergleiche benötigen:
Wenn Sie zwei Doubles vergleichen müssen, verwenden Sie sie in einer Bedingung wie dieser:
Wenn Sie wissen wollen, ob ein Double Null ist (oder sehr, sehr nahe an Null), verwenden Sie eine Bedingung wie diese:
Nebenbei bemerkt, da ich viele Beiträge sehe, die über Divisionen sprechen:
Bei der Kapselung neigen wir dazu, die Kosten des Codes zu vergessen, der in einige Utility-Methoden "ausgelagert" wird. Erinnern Sie sich daran, dass Divisionenrechnerisch sehr teuer sind! Vor allem, wenn sie einmal in netten Utility-Methoden irgendwo in Utility-Klassen verpackt sind, fangen wir an, sie überall in Indikatoren oder EAs zu verwenden und haben längst vergessen, welche Rechenschritte sie ausführen. Bei der Verwendung des Strategietesters zahlen wir für unsere Schlampigkeit eine Menge unnötiger Zeit.
Faustformel: Additionen und Subtraktionen sind viel, viel schneller als Multiplikationen und Divisionen. Die Division benötigt die meiste Rechenzeit.Optimieren Sie Divisionen- wo immer möglich! Wenn der Nenner wie in dieser Schleife fest ist...
dann ersetzen Sie den Nenner x durch seinen invertierten Wert 1/x:
Wenn das Ergebnis einer Division immer gleich ist, dann führen Sie die Berechnung einmal durch und speichern Sie das Ergebnis in einer Variablen, damit Sie es überall in Ihrem Code verwenden können (z. B. in Schleifen):
Prost!
A.T.