错误、漏洞、问题 - 页 744

 
IgorM:
是的,我知道,我引用了不会导致执行错误的代码,但循环了脚本

最后一个印刷品是否没有输出?

还是倒数第二?

最后的指数 调用并没有冻结?

算法达到什么线?

你把指纹放在所有地方吗?

 
sergeev: 最后一个Print 没有被输出吗?

是的,它不是。

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:

是的,它不是。

重复问题--你有2/3/8的指数计算吗?

而且它看起来很奇怪。

1071644672
它是从哪里来的?
 
sergeev: 我重复我的问题--你有2/3/8的指数计算吗?

是这样做的。

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

在日志中。

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

又会出现一个无限循环:)

 
IgorM:

如果是空白的。// if(i3==2 &&i2==3 &&i1==8) Print("错误的exp!!!!调用")。

这将是一个无限的循环:)

循环结束后i1等于7,尽管第三维的最大索引是6。它应该是超出范围的,但如果不是的话,很可能是字符串

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

可能会覆盖i2的值,比如说。但在这种情况下,它是mql-compiler的一个错误。

例如,你可以将数组定义移到全局变量 中--那么上述代码的行为就应该改变。

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

它将再次成为一个无尽的循环:)

我认为错误是在打印机本身。

找出它前面几行的内容,因为最后一个 指数不应该被执行,指数超过了

我认为问题出在你的代码中。

Документация по MQL5: Математические функции / MathExp
Документация по MQL5: Математические функции / MathExp
  • www.mql5.com
Математические функции / MathExp - Документация по MQL5
 
sergeev: 我认为问题出在你的代码中。
我把它附在后面,脚本进入了一个无限的循环,就像这样
附加的文件:
34.mq5  7 kb
 
sergeev:

而且它看起来也很奇怪。

1071644672
从哪里来的?
我想,如果我们把这个数字改写成二进制格式,我们可以更接近于一个线索。
 
IgorM:
我把它附在后面,在这种形式下,脚本会进入一个无限循环。

我有零度德维德,无论是否有印刷品,在

double f(double x){return(1/(1+MathExp(-1*x)));}
一般来说,i1取错了值。虽然它应该在out[][][7]上超出范围。编译器必须考虑基于所有维度的乘法的限制(3*7*7=147),而不是每一个维度。例如,如果i1被分配为8,Print 仍然会打印 一些数值。很明显,这是在检查数组边界时的编译器错误。
 
notused:
显然,编译器计算的是所有维度的乘法所得的约束(3 * 7 * 7 = 147),而不是每一个维度。例如,如果i1被分配为8,Print仍然会产生一些值。很明显,这是在检查数组边界时的编译器错误。

超出范围不是来自编译器。这是一个运行时错误

运行时系统愚蠢地计算了偏移量,如果在计算中涉及到不正确的索引,就不会发生什么,但你没有超出数组的限制。但是,如果你以一种聪明的方式检查索引,每一个都单独检查,你会在执行时得到具体的滞后。

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