Double vs FLOAT - unklarer MathFloor-Fehler - Seite 4

 
Andrey Dik:
float ist die Kastration von Zahlen und bietet keinen Vorteil. Es ist besser, alle Verluste bei den Umrechnungen in Kauf zu nehmen und die höchstmögliche Genauigkeit zu verwenden - das Doppelte.
Ich danke Ihnen. Ich werde versuchen, herauszufinden, wo ich doch einen Fehler gemacht habe. Im Moment funktioniert der Schwimmer noch. Ich habe nicht die Angewohnheit, etwas aufzugeben, was ich einmal angefangen habe. Aber dieser Fehler hat mich aus dem Gleichgewicht gebracht.
 
Vladislav Andruschenko:
Ich danke Ihnen. Ich werde versuchen, herauszufinden, wo mein Fehler lag. In der Zwischenzeit funktioniert der Wagen. Ich bin es nicht gewohnt, aufzuhören. Aber dieser Fehler hat mich aus der Bahn geworfen.
Es bleibt Ihnen überlassen, aber beachten Sie, dass ALLE mathematischen Standardfunktionen mit doppelten Zahlen arbeiten und doppelte Ergebnisse liefern. Die Anwendung dieser Funktionen auf Fließkommazahlen führt zu einer internen Umwandlung in Double, so dass die Genauigkeit und die Gültigkeit der Ergebnisse ohnehin verloren gehen.

Ich persönlich verwende bei Berechnungen und Zahlenvergleichen nie die Methode, die Differenz mit einem minimalen akzeptierten Wert zu vergleichen, ich arbeite immer mit der maximal möglichen Genauigkeit bis zum 16ten Zeichen, und erst in der letzten Operation führe ich eine Normalisierung durch. Wenn Sie das Doppelte richtig handhaben, gibt es kein Problem, was ich Ihnen empfehle. Andernfalls werden Sie Probleme mit der Verzerrung der Ergebnisse haben, die mit einem Verlust der Genauigkeit in einem der Schritte der Berechnungen/Umrechnungen verbunden sind.
 
Andrey Dik:
Es bleibt Ihnen überlassen, aber beachten Sie, dass ALLE Standard-Mathefunktionen mit doppelten Zahlen arbeiten und doppelte Ergebnisse liefern. Die Anwendung dieser Funktionen auf Fließkommazahlen ist immer noch eine interne Konvertierung in Double, so dass in jedem Fall die Genauigkeit und Gültigkeit der erhaltenen Ergebnisse verloren geht.

Ich persönlich verwende bei Berechnungen und Zahlenvergleichen nie die Methode, die Differenz mit einem minimalen akzeptierten Wert zu vergleichen, ich arbeite immer mit der maximal möglichen Genauigkeit bis zum 16ten Zeichen, und erst in der letzten Operation führe ich eine Normalisierung durch. Wenn Sie mit Double richtig keine Probleme, die ich Ihnen raten zu tun, sonst werden Sie Probleme mit Verzerrung der Ergebnisse mit einem Verlust an Genauigkeit in einem der Schritte der Berechnungen / Konvertierungen verbunden begegnen.
Ich danke Ihnen für Ihre ausführliche Antwort.
 

der Bewertungspreis im Jahr 2017 ist unverschämt korrekt

Es sind nicht die Motten, es ist der Mist...

 
Mikhail Dovbakh:

der Bewertungspreis im Jahr 2017 ist unverschämt korrekt

Sagen Sie es uns.
 

so sollte es sein

double Averab=(Ask+Bid)/2/_Point;
double AUTOPRICE=MathFloor( NormalizeDouble(Averab,2) )*_Point;
 
Taras Slobodyanik:

sollte es so sein.

double Averab=MathAbs(Ask-Bid)/2/_Point;
double AUTOPRICE=MathFloor( NormalizeDouble(Averab,2) )*_Point;


Sie haben Ihren Code mehrmals geändert.

Ich habe das Gleiche gemacht: Ich habe experimentiert, ich habe verstanden, was double und int sind, aber wenn ich es explizit berechne, bekomme ich das Falsche.

Die erste Zeile ist das, was Sie vorgeschlagen haben.

MathFloor( NormalizeDouble((Ask+Bid)/Point,_Digits) )*Point
2017.02.26 18:24:59.133 2017.01.02 00:03:00  Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: MathFloor=2.10287
2017.02.26 18:24:59.133 2017.01.02 00:03:00  Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: DOUBLE    askP2=105146 bidP2=105141 Averab2=105143.5000000000 AUTOPRICE=1.0514300000
2017.02.26 18:24:59.133 2017.01.02 00:03:00  Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: FLOAT    askP=105146 bidP=105141 Averab=105143.5000000000 AUTOPRICE=1.0514299870
 

das ist richtig105143.5000000000 abgerundet 43 ist...

(46-41)/2 = 2,5, abgerundet = 2

 
Taras Slobodyanik:

das ist richtig105143.5000000000 abgerundet auf 43...

(46-41)/2 = 2,5, abgerundet = 2


Das ist richtig,

aber mit verschiedenen Spreads (2,3,4,5,6,7) ist die Abrundung nach unten unterschiedlich und manchmal nicht ganz genau.

 
Geprüft von 0 bis 8 ist alles in Ordnung...