ある指標でゼロ除算エラーが発生した - ページ 4

 

の制限で、1/2=0.5の場合、四捨五入で1ではなく0になるようです?

仮説を検証 するために、私はコードを変更しました。

         double d1=(delta_price_high-center_line_point)/((double)limit/2);
         double d2=(center_line_point-delta_price_low)/((double)limit/2);
 
Aleksey Vyazmikin:

完全なゴミ - 再びゼロによる除算エラーが発生

MEからのコードを画像として表示 - 私の目が悪いのかもしれないが、何が起こっているのか理解できない

エラーは同じ行のままです。

印刷用のコードを追加したため、エラー行がずれただけで、ファイルは同じです。

スタイラスを 使うべきです。問題の文字列がチェックゾーン内にないことがすぐにわかるでしょう if(limit==0)

 
Vladimir Karputov:

スタイラスを 使うべきです。問題の文字列がチェックゾーンにないことがすぐにわかるでしょう if(limit==0)

では、入力する必要がないかというと、そうでもない。

 

このコード

         int a=1;
         double test=1/(a/2);

端末を吊り下げる。

 
Aleksey Vyazmikin:

の制限で、1/2=0.5の場合、四捨五入で1ではなく0になるようです?

仮説を検証するために、私はコードを変更しました。

コード

//+------------------------------------------------------------------+
//|                                           writeSpicifiedType.mq5 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""
#property version   "1.00"
//---
double high=-1.0;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   for(int limit=0;limit<4;limit++)
     {
      Print("limit (",limit,")/2 ",limit/2);
     }
  }
//+------------------------------------------------------------------+


結果

Test_en (EURUSD,M30)    limit (0)/2 0
Test_en (EURUSD,M30)    limit (1)/2 0
Test_en (EURUSD,M30)    limit (2)/2 1
Test_en (EURUSD,M30)    limit (3)/2 1
 
Vladimir Karputov:

コード


結果

それが、さっきはどうやら1/2が0ではなく1を出したようなんです。

 
Aleksey Vyazmikin:

それが、以前は1/2が0ではなく1だったはずなんです。

いや、いつもそうなんだ。

 
Vladimir Karputov:

いや、いつもそうやって四捨五入しているんだ。

結局は別物なんですね...。

 

プリントのコードを変更しました

         if(limit/2==0)
         {
         limit=2;
         Print("start_time - ",TimeToString(start_time,TIME_DATE|TIME_MINUTES)," stop_time - ",TimeToString(stop_time,TIME_DATE|TIME_MINUTES));
         Print("start_index=",start_index, " stop_index=",stop_index);
         }

そして今、私は...

2018.07.04 15:47:07.959 IndDrafter (Si-9.18,H1) start_time - 2017.08.10 11:00 stop_time - 2017.08.10 11:00
2018.07.04 15:47:07.959 IndDrafter (Si-9.18,H1) start_index=2012 stop_index=2012

どうして?

 
Aleksey Vyazmikin:

プリントのコードを変更しました

そして今、私は...

どうですか?

すべて正解です。limit=(int)(stop_time-start_time)/PeriodSeconds(_Period) の式で算出される場合

であれば、結果は=0となる。

次に、停止時間と開始時間がどのように形成されるかを見てみましょう。