Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
float askP=NormalizeDouble(Ask,Digits)/NormalizeDouble(Point,Digits);
float bidP=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
float Averab=((askP+bidP))/2.0;
AUTOPRICE=MathFloor(Averab)*Point;
Print("FLOAT "+" askP="+askP+" bidP="+bidP+" Averab="+DoubleToString(Averab,10)+" AUTOPRICE="+DoubleToString(AUTOPRICE,10));
double AUTOPRICE2;
double askP2=NormalizeDouble(Ask,Digits)/NormalizeDouble(Point,Digits);
double bidP2=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
double Averab2=((askP2+bidP2))/2.0;
AUTOPRICE2=MathFloor(Averab2)*Point;
Print("DOUBLE "+" askP2="+askP2+" bidP2="+bidP2+" Averab2="+DoubleToString(Averab2,10)+" AUTOPRICE="+DoubleToString(AUTOPRICE2,10));
difusión:2
2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - DOBLE PRUEBA MATHFLOOR EURUSD,M30: DOBLE askP2=105143 bidP2=105141 Averab2=105142.000000 AUTOPRICE=1.0514200000
2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - DOBLE PRUEBA MATHFLOOR EURUSD,M30: FLOAT askP=105143 bidP=105141 Averab=105142.0000000000 AUTOPRICE=1.0514199734
difusión:3
2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOBLE PRUEBA MATHFLOOR EURUSD,M30: DOBLE askP2=105144 bidP2=105141 Averab2=105142.5000000000 AUTOPRICE=1.0514200000
2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOBLE PRUEBA MATHFLOOR EURUSD,M30: FLOAT askP=105144 bidP=105141 Averab=105142.5000000000 AUTOPRICE=1.0514199734
difusión:4
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOBLE PRUEBA MATHFLOOR EURUSD,M30: DOBLE askP2=105145 bidP2=105141 Averab2=105143.000000 AUTOPRICE=1.0514200000
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOBLE PRUEBA MATHFLOOR EURUSD,M30: FLOAT askP=105145 bidP=105141 Averab=105143.0000000000 AUTOPRICE=1.0514299870
difusión:5
2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOBLE PRUEBA MATHFLOOR EURUSD,M30: DOBLE askP2=105146 bidP2=105141 Averab2=105143.5000000000 AUTOPRICE=1.0514300000
2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOBLE PRUEBA MATHFLOOR EURUSD,M30: FLOAT askP=105146 bidP=105141 Averab=105143.5000000000 AUTOPRICE=1.0514299870
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOBLE PRUEBA MATHFLOOR EURUSD,M30: DOBLE askP2=105145 bidP2=105141 Averab2=105143.000000 AUTOPRICE=1.0514200000
El resultado es correcto. Averab2 < 105143.
El resultado es correcto. Averab2 < 105143.
¿Por qué? PorqueAverab2=105143.0000000000
¿Por qué?Averab2=105143.0000000000
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias
Double vs FLOAT - error MathFloor poco claro
fxsaber, 2017.02.26 08:27
La impresión del número doble no es nada. Si quieres imprimir el valor real de double, tienes que mirar sus bytes.
¿Por qué? PorqueAverab2=105143.0000000000
Te escucho. Gracias, pero esto es en lo que se refiere a la desinflamación.
Pero el valor real dentro del código es el mismo que después de la desimpresión. Lo he comprobado más de una vez,
Lo entiendo,
que el doble 1 = 1,00000000000000000000112123515;
y así sucesivamente.
:-( ok, lo principal es que el problema se resuelve con float
porquehttps://www.mql5.com/ru/docs/math/mathfloor
105143
después de MathFloor(105143) =105142
incluso si 105143.000000000000000000001
pero creo que sé de qué estás hablando.
aunque no
por qué MathFloor(105143) =105142 no puedo entender... (a no ser que no sea105143 sino105142.999999999999999999)
por qué entonces...
por qué entonces MathFloor(105143) =105142 no puedo entender... (a no ser que no sea105143, sino105142.99999999999999999999)
void OnStart()
{
double Price1 = 105143;
double Price2 = Price1 - 1 e-11;
Print(TOSTRING(Price1) + TOSTRING(MathFloor(Price1)) +
TOSTRING(Price2) + TOSTRING(MathFloor(Price2)) +
TOSTRING(Price1 > Price2));
}
No hay que tomarse los números dobles al pie de la letra. Pasar a la flotación es aún más un escollo.