ゼロ割りの回避

  • HOME
  • ゼロ割りの回避

ゼロ割りの回避


数学的に0で数字を割った解は無いとされています。

MetaEditorで double a=1/0; をコンパイルすると「division by zero in the constant expression」とエラーが出ます。

下記のように変数に代入した場合は問題なくコンパイルできます。

double b=0;
double a=1/b;

バックコンパイルしたex4をバックテストした場合

0の割り算をしたところでテストは中止されます。
(7,13)はソースの7行目13文字目が原因という意味です。
これはmq4無しでも表示されるのが興味深いところです。

実際にチャートにEAをセットした場合は下記エラーが出ます。

古いビルドではEAが外れたのですが現在は外れませんが停止しています。
こちらもかっこ内はソースの場所を示しています。

 

● Ifを使った回避方法


double b=0;
double a;
if(b)a=1/b; else a=DBL_MAX;

※DBL_MAXはdouble宣言をした変数に入る最大値です。
正の数を0で割った場合非常に大きい数になりますので、最大値DBL_MAXを入れています。

 

● 三項演算子を使った回避方法


double b=0;
double a=b?1/b:DBL_MAX;

この場合三項演算子はbが0でない場合は1/b 0の時はDBL_MAXをaに代入するという意味になります。

0で割り算をするとシステムが停止します。
1/2は1*0.5にするのがベターです。
変数で割り算をするときには必ずチェックするようにして、ゼロ割りを回避しましょう。

 

株式会社トリロジー
AMSER株式会社
林 貴晴

 

⇒ FEATご利用手順