Что не так (см. скрин)? - страница 2

 
prostotrader:


s_price = 0.0 - это чуть-чуть????

(см. значение переменных в правом нижнем углу скрина)


У вас данные неполные. Могу предположить, что pr_exp НЕ формата double, а например int. Больше гадать не буду, приведите полный код.
 
Yuriy Asaulenko:

Целое-не целое определяется по первому числу. 2/3.0=0, а 2.0/3=0.66. Аналогично и умножение - тип результа по первому числу.

От конкретного компилятора тоже зависит. Лучше все явно приводить к типу результата.


Нет, не верно. Если в операции деления или умножения один из операндов double, второй тоже приводится к double, назависимо от того, первый он или второй. Это от компилятора не зависит, это стандарт приведения типов еще в Си, ну и MQL4/5 это правило унаследовал.

Кстати, ТС на заметку. У вас наверняка должен быть варнинг что-то типа "возможное ухудшение точности". Я писал недавно, что ВСЕ варнинги надо убирать. А какой-то пионер уверял, что они не мешают ))

 
prostotrader:

:) ОК

Юрий точно подметил по поводу последовательности вычисления, поэтому лучше скобки ставить. Умножение имеет больший приоритет, чем деление, так что во втором случае, вполне возможно, что компилятор вычисляет таким образом:

pr_exp / (360*SecStavka) / 100

А Вам, если я правильно понял, нужно 

(pr_exp / 360) * (SecStavka / 100)
 
Alexey Volchanskiy:

Нет, не верно. Если в операции деления или умножения один из операндов double, второй тоже приводится к double, назависимо от того, первый он или второй. Это от компилятора не зависит, это стандарт приведения типов еще в Си, ну и MQL4/5 это правило унаследовал.
Не буду спорить. А книжку по Си смотреть лениво - там это где-то было описано. У меня были такие фишки, когда одно из чисел было целым и выражение считалось неправильно. Теперь везде пишу вместо 3 -> 3.0 и больше на эту тему не заморачиваюсь. И не хочется.))
 
Yuriy Asaulenko:
Не буду спорить. А книжку по Си смотреть лениво - там это где-то было описано. У меня были такие фишки, когда одно из чисел было целым и считалось неправильно. Теперь везде пишу вместо 3 -> 3.0 и больше на эту тему не заморачиваюсь. И не хочется.))


И правильно, если есть какие-то сомнения с приведением типов, лучше перестраховаться. Тем более, теперь даже в MQL4 можно явно привести тип к другому.

int x=1, y=12;
double z=(double)x/y;
***
 
Alexey Volchanskiy:


И правильно, если есть какие-то сомнения с приведением типов, лучше перестраховаться. Тем более, теперь даже в MQL4 можно явно привести тип к другому.

***
Прогресс, однако.))
 
Vasiliy Pushkaryov:

... поэтому лучше скобки ставить. 

Согласен. Тоже подумал, что неплохо бы явно определить последовательность.
 
Yuriy Asaulenko:
Прогресс, однако.))

Да уже где-то год, как ввели из пятерки явное приведение. И сразу отвечу на следующий пост. Если есть сомнения - ставьте скобки, компилятору скобки не помеха, а вам будет яснее и спокойнее.
 
Alexey Volchanskiy:

Да уже где-то год, как ввели из пятерки явное приведение. И сразу отвечу на следующий пост. Если есть сомнения - ставьте скобки, компилятору скобки не помеха, а вам будет яснее и спокойнее.
prostotrader напишите. Его тема. Этот Ваш ответ он может и пропустить, как не ему адресованный.
 
А почему модераторы удаляют посты, где мы разбираем тонкости и особенности MQL?
Причина обращения: