Торговая платформа обладает множеством настроек, что позволяет организовать работу в ней так, как это удобно именно вам. Выполните команду " Настройки" меню "Сервис" или нажмите "Ctrl+O". Графики — общая настройка отображения ценовых графиков, а также настройка параметров управления объектами: выделение объектов после их создания, немедленная...
Hola! ¿Cuál es la forma correcta de utilizar "double" en el bucle "for"? Parece que no hay ninguna prohibición de utilizar "doble" en la ayuda. Entiendo que tengo que normalizar la "i", pero no me funciona.
double expr1=1.0;
double expr2=2.8;
double step=0.2;
double i;
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
int count=0;
for(i=expr1; i<=expr2; i+=step)
{
NormalizeDouble(i,1);
count++;
Print(" i: ",DoubleToStr(i,8)," step: ",DoubleToStr(step,8));
}
int MaxPass=(int)NormalizeDouble(((expr2-expr1)/step),0)+1;
Print(" MaxPass: ",MaxPass," count: ",count," i: ",i);
}
//+------------------------------------------------------------------+
Si "expr2=2.6" sigue bien para 9 iteraciones, pero cuando "expr2=2.8" ya muestra 9 iteraciones mal (el valor correcto es 10).
Hola! ¿Cuál es la forma correcta de utilizar "double" en el bucle "for"? Parece que no hay ninguna prohibición de utilizar "doble" en la ayuda. Entiendo que tengo que normalizar la "i", pero no me funciona.
Si "expr2=2,6" sigue estando bien para 9 iteraciones, pero cuando "expr2=2,8" ya muestra 9 iteraciones incorrectas (el valor correcto es 10).
Hola! ¿Cuál es la forma correcta de utilizar "double" en el bucle "for"? Parece que no hay ninguna prohibición de utilizar "doble" en la ayuda. Entiendo que tengo que normalizar la "i", pero no me funciona.
Si "expr2=2,6", entonces todo es normal 9 iteraciones, pero cuando "expr2=2,8" muestra no correcto 9 iteraciones (correctamente 10).
Gracias, entiendo por qué ocurre, por eso intenté normalizarlo. A mí no me ha funcionado. La opción de Alexey Viktorov tampoco lo arregló, los valores siguen sin normalizarse. Así que la pregunta sigue siendo, ¿se puede usar "doble" en un bucle y obtener siempre el número correcto de iteraciones?
Así que la pregunta sigue siendo, "doble" se puede utilizar en el bucle
puede
Nauris Zukas:
y obtener siempre el número correcto de iteraciones?
el valor de double es siempre correcto, pero no se corresponde con el sistema decimal posicional que se quiere ver u obtener
Nauris Zukas:
Gracias, entiendo por qué sucede esto, por eso intenté normalizar. A mí no me ha funcionado. La opción de Alexey Viktorov tampoco lo arregló, los valores siguen sin normalizarse
Cualquier manipulación con la doble conversión siempre tendrá limitaciones, dudo que este problema se pueda resolver de la manera como en tus ejemplos
Hacer una solución fiable: en el bucle utilizar int y la fórmula para calcular el valor resultante de doble y no utilizar la adición de doble como resultado durante las iteraciones en el bucle - una vez más mirar mi ejemplo en el diálogo con Nikolaev
¿La hora es la misma en la ventana dedatos?
Sí.
Sí.
Ya veo. Así que realmente es la hora del bar. Sólo tenía una sospecha sobre el parámetro"Línea de tiempo precisa".
Hola!
¿Cuál es la forma correcta de utilizar "double" en el bucle "for"? Parece que no hay ninguna prohibición de utilizar "doble" en la ayuda. Entiendo que tengo que normalizar la "i", pero no me funciona.
Si "expr2=2.6" sigue bien para 9 iteraciones, pero cuando "expr2=2.8" ya muestra 9 iteraciones mal (el valor correcto es 10).
Hola!
¿Cuál es la forma correcta de utilizar "double" en el bucle "for"? Parece que no hay ninguna prohibición de utilizar "doble" en la ayuda. Entiendo que tengo que normalizar la "i", pero no me funciona.
Si "expr2=2,6" sigue estando bien para 9 iteraciones, pero cuando "expr2=2,8" ya muestra 9 iteraciones incorrectas (el valor correcto es 10).
Probablemente tenga que normalizar los valores.
Probablemente haya que normalizar los valores.
Si te refieres a esto, tampoco ha servido de nada:
Si te refieres a esto, tampoco ha servido de nada:
No. Como mínimo hay que optimizarlo
porque eso es lo que te da el valor equivocado. Y puede que los demás no tengan que hacerlo.
Hola!
¿Cuál es la forma correcta de utilizar "double" en el bucle "for"? Parece que no hay ninguna prohibición de utilizar "doble" en la ayuda. Entiendo que tengo que normalizar la "i", pero no me funciona.
Si "expr2=2,6", entonces todo es normal 9 iteraciones, pero cuando "expr2=2,8" muestra no correcto 9 iteraciones (correctamente 10).
Aquí puedes encontrar, leyendo el post de Nikolay, una descripción muy detallada y muy cualitativa del doblehttps://www.mql5.com/ru/forum/1111/page2623#comment_14473837
Si no puede asimilar el material de la primera vez, intente sustituir Print() por printf() en su código con salida de doble al menos a la 15ª cifrahttps://www.mql5.com/ru/forum/1111/page2623#comment_14474138.
Tal vez entonces vea por qué esto es así
No. Al menos deberíamos optimizar esto
porque eso es lo que te da el valor equivocado. Y puede que los demás no tengan que hacerlo.
Gracias, pero tu ejemplo tampoco nos ha dado el resultado correcto. En printf puedes ver que no se produce ninguna normalización:
0 10:29:31.595 Test_Double_For EURCHF,H4: i = 1.0000000000000000000000000000000000000000000000000000000000
0 10:29:31.595 Test_Double_Para EURCHF,H4: i = 1.1999999999999995591079014993738305473327636718750000
0 10:29:31.595 Test_Double_Para EURCHF,H4: i = 1.399999999999991111182158029987476766109466552734375000000000
0 10:29:31.595 Test_Double_For EURCHF,H4: i = 1.59999999999999999866773237044981212151491164199829101562500000000
0 10:29:31595 Test_Double_Para EURCHF,H4: i = 1.7999999999999999982236431605997495353221893310546875000000
0 10:29:31.595 Test_Double_Para EURCHF,H4: i = 1.999999999997779553950749686919152736638618359375000000
0 10:29:31.595 Test_Double_For EURCHF,H4: i = 2.1999999999999997335464740899624302983283996582031250000000
0 10:29:31.595 Test_Double_For EURCHF,H4: i = 2.39999999999999991191821580299876766109466552734375000000000
0 10:29:31595 Test_Double_For EURCHF,H4: i = 2.6000000000088817841970012523233890533447265625000000000
0 10:29:31595 Test_Double_For EURCHF,H4: MaxPass: 10 count: 9
0 10:29:31.595 Test_Double_For EURCHF,H4: Last i = 2.800000000002664535259100375697016716003417968750000000
aquí puedes encontrar, leer el post de Nikolay, él describió el trabajo con el doble de una manera muy detallada y muy cualitativahttps://www.mql5.com/ru/forum/1111/page2623#comment_14473837
Si no puede digerir el material de la primera vez, intente sustituir Print() por printf() con salida de doble al menos a 15º dígitohttps://www.mql5.com/ru/forum/1111/page2623#comment_14474138.
Tal vez entonces vea por qué esto es así.
Gracias, entiendo por qué ocurre, por eso intenté normalizarlo. A mí no me ha funcionado. La opción de Alexey Viktorov tampoco lo arregló, los valores siguen sin normalizarse. Así que la pregunta sigue siendo, ¿se puede usar "doble" en un bucle y obtener siempre el número correcto de iteraciones?
Así que la pregunta sigue siendo, "doble" se puede utilizar en el bucle
puede
y obtener siempre el número correcto de iteraciones?
el valor de double es siempre correcto, pero no se corresponde con el sistema decimal posicional que se quiere ver u obtener
Gracias, entiendo por qué sucede esto, por eso intenté normalizar. A mí no me ha funcionado. La opción de Alexey Viktorov tampoco lo arregló, los valores siguen sin normalizarse
Cualquier manipulación con la doble conversión siempre tendrá limitaciones, dudo que este problema se pueda resolver de la manera como en tus ejemplos
Hacer una solución fiable: en el bucle utilizar int y la fórmula para calcular el valor resultante de doble y no utilizar la adición de doble como resultado durante las iteraciones en el bucle - una vez más mirar mi ejemplo en el diálogo con Nikolaev