1

我从这里MetaTrader MQL4下载了一个语言.mq4源代码文件,我认为文件中包含除以零错误。相关部分是:

                                   // Calculate sums for the least-squares method
n   = ( Taps - 1 ) / 2;

sx2 = ( 2*n + 1 ) / 3.0;

sx3 = n * ( n + 1 ) / 2.0;

sx4 = sx2 * ( 3*n*n + 3*n - 1 ) / 5.0;

sx5 = sx3 * ( 2*n*n + 2*n - 1) / 3.0;

sx6 = sx2 * ( 3*n*n*n*( n + 2 ) - 3*n + 1 ) / 7.0;

den = sx6 * sx4 / sx5 - sx5; // <---------------------------- a DIV!0 error here?

这个演示代码案例:

我的假设是否正确,即代码中存在错误,
如果 这样
也许有人可以指出更正应该是什么?


一般计算案例:

什么是行业最佳实践/应该使用哪些实用的软件设计措施作为事件的救生衣保护DIV!0

4

3 回答 3

3

如果 sx5 为零,将发生除以零。要找出导致 sx5 为零的原因,请对 n 求解 sx5=0。

0 = sx5
0 = sx3 * (2*n*n + 2*n - 1) / 3.0
0 = (n*(n + 1) / 2.0) * (2*n*n + 2*n - 1) / 3.0
...
0 = 2*n^4 + 4*n^3 + n^2 - n

该方程的一个可能解是 n=0,因此如果 Taps 为 1,则会出现除以零误差。我不知道该方程是否还有其他解。

更新:添加了数学。

于 2011-03-16T18:41:28.803 回答
0
den = sx6*sx4 / sx5 - sx5; // error here?

sx5 - sx5大概总是等于零,所以是的,这里会发生除以零错误。

编辑:没关系,这是不正确的

于 2011-03-16T18:37:47.150 回答
0

我不这么认为,首先乘法完成,sx6*sx4,然后除以sx5,然后从最终结果中减去sx5。

于 2011-03-16T18:40:43.520 回答