Frage an die MQL4-Meister. Nochmals zu Double Compare. - Seite 10

 
Simca:
SK. schrieb (a):

Mein aufrichtiges Beileid an die Entwickler, die jedem neuen Benutzer1000 Mal das Gleicheerklären müssen...



Dies ist bereits ein unverhohlener Angriff...
Ich stimme zu. SK. ist zwar eine Autorität in diesem Forum, aber "spezielle Computertechnologie" macht auch mich misstrauisch.
Es steht in Lehrbüchern über das Speichern von reellen Zahlen im Speicher und sagt nichts darüber aus, dass sich Variablen von selbst ändern. Obwohl ich das nicht nur von SK in diesem Forum gehört habe.
Wenn Sie also jeden neuen Benutzer 1000 Mal in die Irre geführt haben, sollten Sie ihn jetzt finden und sich für Ihre Worte entschuldigen!

Ich stimme mit Simca überein. Bei der Durchführung von Rechenoperationen sind Fehler möglich, aber beim Speichern, Schreiben oder Lesen sind sie ausgeschlossen!

Deshalb habe ich nach dem Algorithmus der Funktion NormalizeDouble() gefragt, vielleicht hat sie auch arithmetische Operationen, die einen Fehler verursachen?
Was meinen Sie, Simca?
 

GUT. Sie sagen das so selbstbewusst, dass ich anfange zu zweifeln, was Sie da sagen.

Bis vor einiger Zeit habe ich mit einem alten PC mit 256 MB RAM gearbeitet. Wenn man ein paar Programme googelt, speichert das Betriebssystem einen Teil der Daten auf der Festplatte und lädt sie dann wieder hoch. Seit ich den Code geändert habe (Angabe der Normalisierung im Vergleichsoperator), tritt der Fehler nicht mehr auf. Aber ich begann zu zweifeln, nachdem ich Ihre Worte gehört hatte - was, wenn ich den Fehler tatsächlich nicht bemerkt hatte?

Jetzt weiß ich nicht, ob ich mich entschuldigen soll oder nicht. Sollte ich mich irren, so mögen mir 1000 Nutzer verzeihen.

(aber es ist immer noch besser, die Normalisierung direkt bei der Berechnung der Vergleichsoperation durchzuführen:)

 
gravity001:
In den Lehrbüchern steht etwas über die Speicherung von reellen Zahlen im Speicher und nichts über Variablen, die sich von selbst ändern. Das habe ich aber nicht nur beiSK in diesem Forum gehört.
Während der Lagerung wird nichts verändert. Die Art und Weise, wie reelle Zahlen im Computerspeicher dargestellt werden, wirkt sich jedoch auf die Genauigkeit (Bittiefe) der gespeicherten Werte aus. Bei der Durchführung arithmetischer Operationen mit reellen Zahlen ist das Ergebnis oft "nicht genau genug" (aus menschlicher Sicht), so dass es manchmal notwendig ist, das Ergebnis der Operation zu normalisieren. Es ist auf jeden Fall notwendig, das Ergebnis von Operationen im Falle eines anschließenden Vergleichs auf Gleichheit zu normalisieren (oft auf >, <). Es ist auch notwendig, das Ergebnis zu normalisieren, wenn Sie mit Werten mit der erforderlichen streng festgelegten Ziffernkapazität arbeiten (z. B. Preise). Die Zwischenberechnungen mit reellen Zahlen erfordern normalerweise keine Normalisierung.
All dies betrifft jedoch Berechnungen, während sich die im Speicher abgelegten Werte nicht ändern, unabhängig davon, ob sie normalisiert sind oder nicht.
Schwerkraft001:
Deshalb habe ich nach dem Algorithmus der Funktion NormalizeDouble() gefragt, vielleicht hat sie auch arithmetische Operationen, die einen Fehler verursachen?
Was meinen Sie, Simca?
Nun, über den Algorithmus der Funktion NormalizeDouble sollten Sie die Entwickler fragen, zu denen ich nicht gehöre. :) Außerdem ist sie nicht Gegenstand des Streits, da die Funktion NormalizeDouble in beiden Codefragmenten auf absolut identische Weise verwendet wurde. Der einzige Unterschied bestand in einem direkten Vergleich der Ergebnisse der beiden Normalisierungen und im Schreiben dieser Ergebnisse in Variablen und dem anschließenden Vergleich ihrer Werte. Und ich habe festgestellt, dass es keinen Unterschied zwischen den zitierten Fragmenten gibt, da der Typ des von der Funktion NormalizeDouble zurückgegebenen Wertes mit dem Typ der für die Speicherung verwendeten Variablen übereinstimmt. Wenn die Funktion NormalizeDouble jedoch einen Wert zurückgibt, der größer ist als die Variable, in der er gespeichert ist, kann der Unterschied auftreten und wir können nicht sicher sein, dass er identisch ist. Aber laut MetaEditor's HELP ist der Datentyp in beiden Fällen double, so dass es keinen Unterschied geben sollte, unabhängig davon, wie die Funktion NormalizeDouble implementiert ist.
 
SK. писал (а):

(aber es ist immer noch besser, die Normalisierung direkt bei der Berechnung der Vergleichsoperation durchzuführen).

Und damit, was jeden neuen Nutzer betrifft, bin ich absolut einverstanden. Wenn man keine klare Vorstellung davon hat, was und wie es funktioniert, ist es vernünftiger, den sichereren und zuverlässigeren Weg zu wählen! Aber das geht Sie und mich nichts an. :)
Und für meinen Teil (für diejenigen, die das Wesen der Frage nicht ganz verstehen) kann ich auch empfehlen:

(dennoch ist es besser, die Normalisierung direkt bei der Berechnung der Vergleichsoperation (c) SK durchzuführen.

 
SK. писал (а):

(aber es ist immer noch besser, die Normalisierung direkt bei der Berechnung der
die Vergleichsoperation wird berechnet:)





Es tut mir leid, aber im Hinblick auf die Effizienz gibt es viel bessere Implementierungen für den Vergleich von Daten, die eine Normalisierung erfordern. Im Allgemeinen ist dies der Standard (Vergleichsalgorithmus). Sie müssen die Differenz mit der Hälfte des Maßstabswertes vergleichen. Was ich meine: um Preise zu vergleichen (ob sie unterschiedlich sind oder nicht), sollten Sie die Differenz nehmen und sie mit 0,5*Roynt vergleichen (sie kann nur einmal während der Initialisierung von Expert Advisor/Script\indicator berechnet werden. Dies ist viel effizienter als der Aufruf einer Funktion, vor allem, wenn diese auch noch in einer Schleife steht) .... Dabei spielt es keine Rolle, wie diese Daten gespeichert sind und auf welches unbedeutende Zeichen sie gerundet werden.

Viel Glück!
 
Erstens ist die Arbeit mit Dubles eine reine Compiler-Sache, so dass es unangemessen ist, von mql4, das im Wesentlichen ein versteckter intrinsischer Compiler ist, Bequemlichkeit zu verlangen. Die Hauptsache ist, dass die Entwickler eine Möglichkeit gegeben haben, das korrekte Ergebnis des Vergleichs zu GARANTIEREN, wir haben es mit unseren Händen überprüft, es ist natürlich grafisch, aber FUNKTIONSTÄCHTIG!!! Obwohl die Dokumentation sagt, dass normalisieren nur im Falle von "!=" oder "==", haben unsere unabhängigen und fachkundigen Tests gezeigt, dass (a>b) KEIN (!) korrektes Ergebnis garantiert, wenn sich herausstellt, dass a gleich b ist! Selbst wenn Sie VORSÄTZLICH sowohl a als auch b normalisieren, ist das Ergebnis unvorhersehbar. Und hier ist eine Konstruktion von Entwicklern:: NormalizeDouble(a-b, Digits)>0 funktioniert zuverlässig! Ich weiß nicht, warum die Leute hier nicht wie normalize Funktion... Vielleicht ist es (intern) ganz sempotical getan wie folgt: zwei Tabellen sind geteilt durch doppelte Genauigkeit, und abgerundet (oder oben). Danach wird das Ganze ohne Probleme verglichen.
 
.FG писал (а):
Erstens ist die Arbeit mit Dubles eine reine Compiler-Sache, so dass es unangemessen ist, von mql4, das im Wesentlichen ein versteckter intrinsischer Compiler ist, Bequemlichkeit zu verlangen. Die Hauptsache ist, dass die Entwickler eine Möglichkeit gegeben haben, das korrekte Vergleichsergebnis zu GARANTIEREN, wir haben es mit unseren Händen überprüft, es ist natürlich grafisch, aber es FUNKTIONIERT!!! Obwohl die Dokumentation sagt, dass normalisieren nur im Falle von "!=" oder "==", haben unsere unabhängigen und fachkundigen Tests gezeigt, dass (a>b) KEIN (!) korrektes Ergebnis garantiert, wenn sich herausstellt, dass a gleich b ist! Selbst wenn Sie VORSÄTZLICH sowohl a als auch b normalisieren, ist das Ergebnis unvorhersehbar. Und hier ist eine Konstruktion von Entwicklern:: NormalizeDouble(a-b, Digits)>0 funktioniert zuverlässig! Ich weiß nicht, warum die Leute hier nicht wie normalize Funktion... Vielleicht ist es (intern) ganz sempotical getan wie folgt: zwei Tabellen sind geteilt durch doppelte Genauigkeit, und abgerundet (oder oben). Anschließend werden die ganzen Zahlen problemlos verglichen.

Bitte schreiben Sie in korrektem Russisch.

 
Geben Sie mir einen Link zur Website des Entwicklers (der russischen Sprache), und ich verspreche, dass ich NUR die Definitionen des Autors verwenden werde. :) Dein Standpunkt ist meiner Meinung nach nicht richtiger als meiner, aber wenn DU PERSÖNLICH verstehen willst, dann werde ich einen "Sprecher für Rosh" machen, wenn du nicht zwischen Blabla und Expertenmeinung unterscheiden kannst. Denn ich habe nicht dich geschrieben, sondern den 1001sten Anfänger. :)
 
.FG писал (а):
Geben Sie mir einen Link zu Ihrer Website und ich verspreche Ihnen, dass ich NUR die BEGRIFFSBESTIMMUNGEN des AUTORS verwenden werde. :) Ihre Idee ist, glaube ich, nicht richtiger als meine, aber wenn SIE PERSÖNLICH verstehen wollen, werde ich einen "Sprecher für Rosh" machen, wenn Sie nicht zwischen Blabla und Expertengutachten unterscheiden können. Denn ich habe nicht an Sie geschrieben, sondern an den 1001sten Neuankömmling. :)

Zum Beispiel www.gramota.ru

Wir haben keinen albanischen Bereich im Forum. Dennoch werden Sie nach der nächsten nicht-russischen Post dorthin geschickt. Bitte lassen Sie es nicht so klingen, als würden Sie die Sprache benutzen.

 
In diesem Fall sollten Sie, stringo, mit einem Diploma of Achievement in Programming zu Cyril und Methodius gehen! All diese Probleme mit der Normalisierung sind mir in freien DOS-Compilern begegnet, die in aktuellen Versionen längst bequem implementiert sind, weshalb manche Programmierer nicht verstehen, warum sie eine so veraltete Prüfung von Verdopplungen brauchen. Wenn sie ihren Code neu schreiben und überall Normolysen im Vergleich zu Null einbauen, werden sie überrascht sein, in ihrer eigenen "C-Logik" keine Fehler zu finden, und nicht RECHTS Kommentare von Vätern-Ausführenden, weil sie sich auf Optimierungen und andere sekundäre Dinge stützen können. Aber die Fragen zu den ERGEBNISSEN der grundlegenden Berechnungen bleiben entscheidend und erfordern höchste Aufmerksamkeit. Und wenn Sie mir wieder drohen, mich wegzuschicken, gehen wir zu irgendeiner CME, nehmen deren Unterlagen und schreiben ein Programm mit FIXes und anderen Tricks in OLBANKA. :) Und du wirst arbeitslos sein. Du wirst dein mq6 machen und du wirst wollen, dass jemand deine Produkte wenigstens auf Albanisch testet, aber nein, wir werden nicht da sein... Weil du uns selbst still und leise verbannt hast... :)))))))))))))))))))))))000