我从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
事件的救生衣保护?
答案 0 :(得分:3)
如果sx5为零,则会出现除零。要找到导致sx5为零的原因,请为n。
求解sx5 = 00 = 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。