He optado por la solución de redondear 1 dígito más medianteNormalizeDouble, y luego recortar el último dígito. Hasta ahora, es completamente adecuado.
P.D. Pido disculpas por volver a sacar el tema, pero no tengo energía para volver a hablar de todo esto
Es mejor que lo compruebes tú mismo con diferentes ejemplos, te dará una idea.
Lo único es que lo estoy haciendo mal:
if(delta>0)
sino así.
if(delta>0.0)
Para los números dobles. No sé si realmente importa, pero nunca he encontrado un error con mi variante (intento comparar sólo los mismos tipos de variables).
Algunos números sólo pueden representarse como una fracción infinita, por ejemplo, 1/3 en el sistema decimal. Pero 1/3 no es una fracción infinita en el sistema terciario, allí es == 0,1. Es decir, los diferentes sistemas numéricos tienen sus propias fracciones infinitas. En consecuencia, una fracción no infinita en decimal puede ser uno en binario. Por ejemplo: 0,1, 0,2, 0,3, 0,4, ... no tienen una representación binaria exacta. Si llamas a NormalizeDouble diez veces, será o bien 0,199999999...1 o bien 0,200000...1. No sé, quizás esto sea una novedad.
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Hizo funciones para redondear el fondo y la parte superior alguna vez
Podría ayudar a alguien
Hizo funciones para redondear el fondo y la parte superior alguna vez
Podría ayudar a alguien
intenta obtener un resultado de0,9999999999999999999
X = 0.99999999999999999
10*X = 10*0.99999999999999999
10*X-X = 10*0,9999999999999-0,99999999999
9*X = 9*0.99999999999999999
obtenemos 9*X = 9 o X es igual a 1 (uno)
v1 = (1/3) = 0,33333333 | v2 = 3*(1/3) = 1,00000000
o 0,9999999999999 = 1,0
v1 (1.00000000) >= 1.0
Gracias a todos por este hilo tan útil.
He optado por la solución de redondear 1 dígito más medianteNormalizeDouble, y luego recortar el último dígito. Hasta ahora, es completamente adecuado.
De nuevo sobre el redondeo......
Por favor, asesórese sobre la situación (no tire tomates, soy humanitario),
existe dicha variable:
double delta=NormalizeDouble(new_lot-sum_lots,Lots_Digits);
if(delta>0) delta-=OrderLots();
if(delta<0) delta+=OrderLots();
El delta está originalmente normalizado,
Probablemente, OrderLots debería devolver dubs normalizados,
pero de alguna manera a veces en raras ocasiones obtengo números como 2.775557561562891e-17
Así que es casi cero pero no cero.......
primera pregunta: ¿es esto normal?
segunda pregunta - según entiendo me bastará con hacer la segunda normalización para evitar las colas?
Tercera pregunta (siento que no la entenderé de todos modos, pero lo preguntaré igualmente):
¿puede la suma de dos números normalizados dar números no normalizados?
P.D. Pido disculpas por volver a sacar el tema, pero es que no tengo fuerzas para releerlo todo de nuevo
De nuevo sobre el redondeo......
Por favor, asesórese sobre la situación (no tire tomates, soy humanitario),
existe dicha variable:
double delta=NormalizeDouble(new_lot-sum_lots,Lots_Digits);
if(delta>0) delta-=OrderLots();
if(delta<0) delta+=OrderLots();
El delta está originalmente normalizado,
Probablemente, OrderLots debería devolver dubs normalizados,
pero de alguna manera a veces en raras ocasiones obtengo números como 2.775557561562891e-17
Así que es casi cero pero no cero.......
primera pregunta: ¿es esto normal?
segunda pregunta - según entiendo me bastará con hacer la segunda normalización para evitar las colas?
Tercera pregunta (siento que no la entenderé de todos modos, pero lo preguntaré igualmente):
¿puede la suma de dos números normalizados dar números no normalizados?
P.D. Perdonad que lo saque de nuevo, pero es que no tengo energía para releerlo todo
P.D. Pido disculpas por volver a sacar el tema, pero no tengo energía para volver a hablar de todo esto
Es mejor que lo compruebes tú mismo con diferentes ejemplos, te dará una idea.
Lo único es que lo estoy haciendo mal:
sino así.
Para los números dobles. No sé si realmente importa, pero nunca he encontrado un error con mi variante (intento comparar sólo los mismos tipos de variables).
No sé si realmente importa, pero nunca he encontrado un error con mi versión (sólo intento comparar los mismos tipos de variables).