Erreurs, bugs, questions - page 744

 
IgorM:
Oui, je sais, et j'ai cité un code qui ne provoque pas d'erreur d'exécution, mais qui boucle le script

la dernière impression n'est pas sortie ?

Ou l'avant-dernier ?

Et le dernier appel de l'exposant ne se fige pas ?

L'algorithme atteint quelle ligne ?

Vous avez mis les empreintes partout ?

 
sergeev: La dernière impression ne s'affiche pas ?

Oui, ça ne l'est pas.

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:

Oui, ça ne l'est pas.

Question répétée - avez-vous un exposant calculé pour 2/3/8 ?

et aussi, ça a l'air étrange.

1071644672
d'où vient-il ?
 
sergeev: Je répète ma question : avez-vous un exposant calculé pour 2/3/8 ?

l'a fait comme ça :

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);

dans le journal :

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

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

une boucle infinie se produira à nouveau :)

 
IgorM:

si elle est effacée :// if(i3==2 && i2==3 && i1==8) Print("wrong exp !!!! call") ;

encore une fois, ce sera une boucle infinie :)

i1 est égal à 7 après la fin de la boucle, bien que l'indice maximal de la troisième dimension soit 6. Il est censé être hors de portée, mais si ce n'est pas le cas, il est tout à fait possible que la chaîne de caractères

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

peut écraser la valeur de i2, par exemple. Mais dans ce cas, c'est une erreur dans le compilateur mql.

Vous pouvez déplacer, par exemple, la définition des tableaux vers des variables globales - le comportement du code ci-dessus devrait alors changer.

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

ce sera à nouveau une boucle sans fin :)

Je pense que l'erreur vient de l'imprimante elle-même.

Trouvez ce qui se trouve sur les lignes qui le précèdent. puisque le dernier exposant ne doit pas être exécuté. l'indice dépasse

Je pense que le problème est dans votre code.

Документация по MQL5: Математические функции / MathExp
Документация по MQL5: Математические функции / MathExp
  • www.mql5.com
Математические функции / MathExp - Документация по MQL5
 
sergeev: Je pense que le problème est dans votre code.
Je l'ai joint, le script entre dans une boucle infinie comme ceci
Dossiers :
34.mq5  7 kb
 
sergeev:

et cela semble également étrange.

1071644672
d'où vient-il ?
Je pense que nous pouvons nous rapprocher d'un indice si nous réécrivons ce nombre au format binaire.
 
IgorM:
Je l'ai joint, sous cette forme, le script entre dans une boucle infinie.

J'ai Zero Devide avec ou sans empreinte, sur

double f(double x){return(1/(1+MathExp(-1*x)));}
En général, i1 prend une valeur erronée. Bien qu'il devrait être hors de portée sur out[][][7]. Le compilateur doit envisager des restrictions basées sur la multiplication de toutes les dimensions (3 * 7 * 7 = 147) au lieu de chacune d'elles. Par exemple, si i1 est affecté à 8, Print imprime quand même certaines valeurs. De toute évidence, il s'agit d'une erreur de compilation lors de la vérification des limites des tableaux.
 
notused:
Apparemment, le compilateur calcule les contraintes procédant de la multiplication de toutes les dimensions (3 * 7 * 7 = 147) et non de chacune d'entre elles. Par exemple, si l'on attribue 8 à i1, Print produit quand même quelques valeurs. De toute évidence, il s'agit d'une erreur de compilation lors de la vérification des limites des tableaux.

Out of range ne provient pas du compilateur. Il s'agit d'une erreur d'exécution.

Le système d'exécution a stupidement calculé le décalage et rien ne se passera si des index incorrects ont été impliqués dans le calcul, mais vous n'avez pas dépassé les limites du tableau. Mais si vous vérifiez les indices de manière intelligente, chacun séparément, vous obtiendrez des décalages concrets à l'exécution.

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