Особенности языка mql5, тонкости и приёмы работы - страница 143
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Просто не надо надеяться, что если отсутствует значение, то это обязательно 0 и соответственно false если это переменная не типа bool. Даже явное приведение к типу bool не спасёт.
Так работает без ошибок.
Я, честно говоря, вообще не понял откуда берётся ноль:
В TickValue[0] содержится мусор. Он может равняться нулю, и может не равняться нулю.
Если мусор в TickValue[0] не равен нулю, то рассчитываем Points = Profit / Lots * ненулевой мусор * _Point, иначе, если мусор в TickValue[0] равен нулю - Points приравниваем к нулю.
И откуда в выражении Lots * ненулевой мусор * _Point берётся ноль, если Lots инициализирован единицей при объявлении? В _Point ноль?
Ошибка понятна по факту.
Ок, ошибка непонятна. И у меня не воспроизводится.
Ок, ошибка непонятна. И у меня не воспроизводится.
Грубо говоря, вызов этой функции может вызывать деление на ноль.
Столкнулся с проблемой на практике в библиотеке Report. Потом понял, что это логично.
Грубо говоря, вызов этой функции может вызывать деление на ноль.
у меня такой код на пограничных даблах выдает inf, но не крешится
у меня такой код на пограничных даблах выдает inf, но не крешится
такой крешится.
Подводя итог, перемножение двух ненулевых даблов может давать ноль. И это не не какой-то вырожденный случай, а реальный на практике.
Грубо говоря, боевой советник может сломаться из-за этого с далеко не нулевой вероятностью.
Причем проверка на ноль не спасет, ни явная, ни неявная (приведение к bool)
Подводя итог, перемножение двух ненулевых даблов может давать ноль. И это не не какой-то вырожденный случай, а реальный на практике.
Грубо говоря, боевой советник может сломаться из-за этого с далеко не нулевой вероятностью.
на NaN нужно дополнительно проверять, скорее всего этот код будет работать http://qaru.site/questions/20557/checking-if-a-double-or-float-is-nan-in-c
или ограничивать точность, как в примере CompareDoubles() - он кажется в СБ есть https://www.mql5.com/ru/docs/basis/types/double