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

その方程式の考えられる解の 1 つは n=0 であるため、Taps が 1 の場合、ゼロ除算エラーが発生します。方程式に他の解があるかどうかはわかりません。

更新: 数学を追加しました。

于 2011-03-16T18:41:28.803 に答える
0

私はそうは思いません。最初に sx6*sx4 の乗算が行われ、次にそれが sx5 で除算され、最終結果から sx5 が減算されます。

于 2011-03-16T18:40:43.520 に答える
0
den = sx6*sx4 / sx5 - sx5; // error here?

sx5 - sx5おそらく常にゼロに等しいため、ここでゼロ除算エラーが発生します。

編集:気にしないでください、これは間違っています

于 2011-03-16T18:37:47.150 に答える