Errores, fallos, preguntas - página 744

 
IgorM:
Sí, lo sé, y cité un código que no causa error de ejecución, sino que hace un bucle en el script

¿la última impresión no sale?

¿O el penúltimo?

¿Y la última llamada al exponente no se congela?

¿Qué línea alcanza el algoritmo?

¿has puesto las huellas en todas partes?

 
sergeev:¿la última impresión no se emite?

Sí, no lo es.

2012.05.27 23:44:15	34 (EURUSD,M15)	Abnormal termination
2012.05.27 23:44:14     34 (EURUSD,M15) out[0][1071644672][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][5][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][4][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][3][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][2][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][1][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][0][7] = 0.02401042497265053
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][6][7] = 0.6115035058049522
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][5][7] = 0.6315711056280579
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][4][7] = 0.2054980719299829
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][3][7] = 0.5596305561874292
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][2][7] = 0.3623413658485376
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][1][7] = 0.8933844140595046
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][0][7] = 0.9005057454076223
2012.05.27 23:44:14     34 (EURUSD,M15) out[0][1071644672][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][5][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][4][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][3][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][2][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][1][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][0][7] = 0.02401042497265053
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][6][7] = 0.6115035058049522
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][5][7] = 0.6315711056280579
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][4][7] = 0.2054980719299829
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][3][7] = 0.5596305561874292
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][2][7] = 0.3623413658485376
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][1][7] = 0.8933844140595046
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][0][7] = 0.9005057454076223
2012.05.27 23:44:14     34 (EURUSD,M15) out[0][1071644672][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][5][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][4][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][3][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][2][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][1][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][0][7] = 0.02401042497265053
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][6][7] = 0.6115035058049522
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][5][7] = 0.6315711056280579
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][4][7] = 0.2054980719299829
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][3][7] = 0.5596305561874292
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][2][7] = 0.3623413658485376
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][1][7] = 0.8933844140595046
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][0][7] = 0.9005057454076223
2012.05.27 23:44:14     34 (EURUSD,M15) out[0][1071644672][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][5][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][4][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][3][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][2][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][1][7] = 0.5
2012.05.27 23:44:14     34 (EURUSD,M15) out[2][0][7] = 0.02401042497265053
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][6][7] = 0.6115035058049522
2012.05.27 23:44:14     34 (EURUSD,M15) out[1][5][7] = 0.6315711056280579
2012.05.27 23:44:10     34 (EURUSD,M15) out[1][3][7] = 0.5596305561874292
2012.05.27 23:44:10     34 (EURUSD,M15) out[1][2][7] = 0.3623413658485376
2012.05.27 23:44:10     34 (EURUSD,M15) out[1][1][7] = 0.8933844140595046
2012.05.27 23:44:10     34 (EURUSD,M15) out[1][0][7] = 0.9005057454076223
2012.05.27 23:44:10     34 (EURUSD,M15) out[0][1071644672][7] = 0.5
2012.05.27 23:44:10     34 (EURUSD,M15) out[2][5][7] = 0.5
2012.05.27 23:44:10     34 (EURUSD,M15) out[2][4][7] = 0.5
2012.05.27 23:44:10     34 (EURUSD,M15) out[2][3][7] = 0.5
2012.05.27 23:44:10     34 (EURUSD,M15) out[2][2][7] = 0.5
2012.05.27 23:44:09     34 (EURUSD,M15) out[0][1071644672][7] = 0.5
2012.05.27 23:44:09     34 (EURUSD,M15) out[2][5][7] = 0.5
2012.05.27 23:44:09     34 (EURUSD,M15) out[2][4][7] = 0.5
2012.05.27 23:44:09     34 (EURUSD,M15) out[2][3][7] = 0.5
 
IgorM:

Sí, no lo es.

repito la pregunta - ¿tienes un exponente calculado para 2/3/8?

y además tiene un aspecto extraño.

1071644672
¿De dónde viene?
 
sergeev: Repito mi pregunta: ¿tienes un exponente calculado para 2/3/8?

lo hizo así:

int i1,i2,i3;
double out[3][7][7];
for(i1=0;i1<7;i1++) out[0][0][i1] = inp[i1];
double sum;
sum = 0.0;
for(i3=0;i3<3;i3++){
   for(i2=0;i2<7;i2++){
      for(i1=1;i1<7;i1++)  sum += W[i3][i2][i1] * out[i3][i2][i1-1];
      if(i3==2 && i2==3 && i1==8) Print("неправильный вызов exp!!!!");
      out[i3][i2][i1] = f(sum + WT[i3][i2]);
      sum = 0.0;
      Print("out[",i3,"][",i2,"][",i1,"] = ",out[i3][i2][i1]);
   }
}
Print("sum = ",sum);

en el registro:

2012.05.27 23:55:30     34 (EURUSD,M15) array out of range in '34.mq5' (180,7)

si se comenta: // if(i3==2 && i2==3 && i1==8) Print("incorrect exp!!!! call");

de nuevo se producirá un bucle infinito :)

 
IgorM:

si está en blanco:// if(i3==2 && i2==3 && i1==8) Print("wrong exp!!!! call");

de nuevo será un bucle infinito :)

i1 es igual a 7 después de la finalización del bucle, aunque el índice máximo de la tercera dimensión es 6. Se supone que está fuera de rango, pero si no es así, es muy posible que la cadena

out[i3][i2][i1] = f(sum + WT[i3][i2]);

puede sobrescribir el valor de i2, por ejemplo. Pero en este caso se trata de un error en el compilador de mql.

Puedes mover, por ejemplo, la definición de los arrays a las variables globales - entonces el comportamiento del código anterior debería cambiar.

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - Документация по MQL5
 
IgorM:

volverá a ser un bucle sin fin :)

Creo que el error está en la propia impresora.

Averigua qué hay en las líneas anteriores. ya que el último exponente no debe ejecutarse. el índice supera

Creo que el problema está en tu código.

Документация по MQL5: Математические функции / MathExp
Документация по MQL5: Математические функции / MathExp
  • www.mql5.com
Математические функции / MathExp - Документация по MQL5
 
sergeev: Creo que el problema está en tu código.
Lo he adjuntado, el script entra en un bucle infinito así
Archivos adjuntos:
34.mq5  7 kb
 
sergeev:

y también tiene un aspecto extraño.

1071644672
¿de dónde viene?
Creo que podemos acercarnos un poco más a una pista si reescribimos este número en formato binario.
 
IgorM:
Lo tengo adjunto, de esta forma el script entra en un bucle infinito.

Tengo Zero Devide con o sin huella, en

double f(double x){return(1/(1+MathExp(-1*x)));}
En general, i1 toma un valor erróneo. Aunque debería estar fuera de rango en out[][][7]. Aparentemente, el compilador calcula las restricciones a partir de la multiplicación de todas las dimensiones (3 * 7 * 7 = 147) en lugar de cada una. Por ejemplo, si a i1 se le asigna 8, Print sigue imprimiendo algunos valores. Obviamente, es un error del compilador al comprobar los límites del array.
 
notused:
Aparentemente, el compilador calcula las restricciones a partir de la multiplicación de todas las dimensiones (3 * 7 * 7 = 147) y no de cada una de ellas. Por ejemplo, si a i1 se le asigna 8, Print sigue produciendo algunos valores. Obviamente, es un error del compilador al comprobar los límites del array.

Fuera de rango no es del compilador. Se trata de un error de ejecución.

El sistema en tiempo de ejecución ha calculado estúpidamente el desplazamiento y no pasará nada si en el cálculo han intervenido índices incorrectos, pero no has sobrepasado los límites del array. Pero si compruebas los índices de forma inteligente, cada uno por separado, obtendrás retrasos concretos en la ejecución.

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки времени выполнения
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки времени выполнения
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки времени выполнения - Документация по MQL5