Ничего не помогает, деление на ноль. - страница 2

 
Aleksei Lesnikov:

Место 41 - знак деления. В знаменателе, даже если корень квадратный будет равен нулю, нуля не будет. Остается только переменная, передаваемая в MathSqrt.

Но данный эксперт без проблем работает в другом экземпляре МТ5. Почему там нет такой ошибки?

Запустите скрипт пожалуйста

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double a= sqrt(-2);
   double b=a+0.00000001;
   int f=0;
  }

 и отследите значения:


А затем добавьте ещё одну строку (операцию деление)

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double a= sqrt(-2);
   double b=a+0.00000001;
   double c=1.0/b;
   int f=0;
  }
- сразу будет ошибка деление на ноль.
 
Aleksei Lesnikov:

Место 41 - знак деления. В знаменателе, даже если корень квадратный будет равен нулю, нуля не будет. Остается только переменная, передаваемая в MathSqrt.

Но данный эксперт без проблем работает в другом экземпляре МТ5. Почему там нет такой ошибки?

"Место 41" не может быть знаком деления, компилятор указывает на переменную в которой 0.
Это либо at либо con.mt. То есть их нужно проверять на 0 перед делением.

 

@Vladimir Karputov и @Taras Slobodyanik, благодарю - проблема наверняка была именно в переменной под знаком корня.

Эксперт во время работы сохраняет свои значения в файл. Видимо, что-то не корректно сохранилось. Удалил файл - ошибка пропала.