Весьма странное деление.

 

Здравствуйте!

Есть такой код:

//Вычислить экспоненциальный средний болинджер
double y[50];
double k = 0;
double CHECKFLAT_GetExponentBolinger()
{
      int size = iBolinger_Count + 1;
      ArrayResize(y, size);
      double value = dArrayBolinger[0]; //эта переменная выше в коде
      y[0] = dArrayBolinger[0];
      Print (" size = ", size);
      //Cначала вычисляем простое среднее
      
      for (int i = 1; i < size ; i++)
      {
            Print("Cycle prost aver");
            value = value + dArrayBolinger[i];
            y[i] = dArrayBolinger[i];     
      } 
      value = value / size; // ok
      Print("Prostoe srednee = ", value);
      //тепеь экспоненциальное
      k = 2 / (size + 1);  // СТРОКА, КОТОРАЯ ОЧЕНЬ СМУЩАЕТ
      Print ("k = ",k, "size = ",size);
      for (i = 1; i < size; i++)
      {
            value = y[i] * k + value * (1 - k);
            Print(" y[i] = ", y[i], " k = ", k); 
            y[i] = value;
      }     
      Print (" Exponent bolinger = ", value);
      return (value); 
}

Вызываем фу-ю, чтобы посчитать среднее экспоненциальное среднее значение ширины болинджера. Вроде что-то считает, но есть но. Вот отрывок лога.


00:26:13 2011.04.28 10:58 Green dolphin GAZP,H1: MINUTS ARE GOOD
00:26:13 2011.04.28 10:58 Green dolphin GAZP,H1: dArrayBolinger[0] = 4.2784
00:26:13 2011.04.28 11:58 Green dolphin GAZP,H1: MINUTS ARE GOOD
00:26:13 2011.04.28 11:58 Green dolphin GAZP,H1: dArrayBolinger[1] = 4.3042
00:26:13 2011.04.28 11:58 Green dolphin GAZP,H1: size = 2
00:26:13 2011.04.28 11:58 Green dolphin GAZP,H1: Cycle prost aver
00:26:13 2011.04.28 11:58 Green dolphin GAZP,H1: Prostoe srednee = 4.2913
00:26:13 2011.04.28 11:58 Green dolphin GAZP,H1: k = 0size = 2
00:26:13 2011.04.28 11:58 Green dolphin GAZP,H1: y[i] = 4.3042 k = 0
00:26:13 2011.04.28 11:58 Green dolphin GAZP,H1: Exponent bolinger = 4.2913
00:26:13 2011.04.28 11:58 Green dolphin GAZP,H1: Predidushiy exponents bolinger = 4.2913
00:26:13 2011.04.28 12:58 Green dolphin GAZP,H1: MINUTS ARE GOOD
00:26:13 2011.04.28 12:58 Green dolphin GAZP,H1: dArrayBolinger[2] = 4.4523
00:26:13 2011.04.28 12:58 Green dolphin GAZP,H1: size = 3
00:26:13 2011.04.28 12:58 Green dolphin GAZP,H1: Cycle prost aver
00:26:13 2011.04.28 12:58 Green dolphin GAZP,H1: Cycle prost aver
00:26:13 2011.04.28 12:58 Green dolphin GAZP,H1: Prostoe srednee = 4.345
00:26:13 2011.04.28 12:58 Green dolphin GAZP,H1: k = 0size = 3
00:26:13 2011.04.28 12:58 Green dolphin GAZP,H1: y[i] = 4.3042 k = 0
00:26:13 2011.04.28 12:58 Green dolphin GAZP,H1: y[i] = 4.4523 k = 0
00:26:13 2011.04.28 12:58 Green dolphin GAZP,H1: Exponent bolinger = 4.345
00:26:13 2011.04.28 12:58 Green dolphin GAZP,H1: Predidushiy exponents bolinger = 4.345

K = 0 size != 0. Хотя написано четко

k = 2 / (size + 1);  // СТРОКА, КОТОРАЯ ОЧЕНЬ СМУЩАЕТ
Подскажите, в чем прикол? И как его решить?
 

у вас size типа int, то есть целое делится на целое

почитайте здесь https://docs.mql4.com/ru/basis/types/casting

объявите size как double и решите проблему

 
GreenDo:


K = 0 size != 0. Хотя написано четко

Подскажите, в чем прикол? И как его решить?
k = 2. / (size + 1);  // СТРОКА, КОТОРАЯ ОЧЕНЬ СМУЩАЕТ
Можно так. В МКЛ нет приведения типов.
 
k = 2. / (size + 1);  // СТРОКА, КОТОРАЯ ОЧЕНЬ СМУЩАЕТ
Вот так помогло. А вот size в double не прокатило. Спасибо.