此代码是否包含除零错误?

时间:2011-03-16 18:34:33

标签: math divide-by-zero metatrader4 mql4

我从here下载了 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 事件的救生衣保护?

3 个答案:

答案 0 :(得分: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,则会出现除零误差。我不知道该等式是否有其他解。

更新:增加了数学。

答案 1 :(得分:0)

den = sx6*sx4 / sx5 - sx5; // error here?

sx5 - sx5大概总是等于零,所以这里会出现除零错误。

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

答案 2 :(得分:0)

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