Особенности языка mql5, тонкости и приёмы работы - страница 144
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
на NaN нужно дополнительно проверять
Там нормальное число. Проверка простая - на что делишь, то и проверяй на ноль.
Там нормальное число. Проверка простая - на что делишь, то и проверяй на ноль.
но Вы не проверяете на ноль в этом коде:
выражение Num ? в MQL будет истинно если в 8 байтах double не будет значения 0x0000000000000000
в любом другом случае это выражение (Num ?) будет true
я в начале месяца поднимал дискуссию насчет не строй проверки bool в MQL - ответ, потери данных нет, значит не нужно - это та же проблема, Вы иожете попытаться разделить выражение на NaN - байты же double будут не пустые?
сейчас не смогу проверить, но скорее всего нужно так:
но Вы не проверяете на ноль в этом коде:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
fxsaber, 2019.10.28 11:42
сейчас не смогу проверить, но скорее всего нужно так:
Не будет работать. В примере краша Num - обычное число. bool не при делах.
Не будет работать. В примере краша Num - обычное число. bool не при делах.
проверил поиск NaN
в MQL5 действительно работает, можно цикл и с нуля запустить, дольше ждать придется
тут в общем Ваш вопрос это вопрос точности double - она вообще привязана к конкретному типу процессора, поэтому и были выше комментарии, что не воспроизводится ошибка
UPD:
лучше так вывод сделать:
тут в общем Ваш вопрос это вопрос точности double - она вообще привязана к конкретному типу процессора, поэтому и были выше комментарии, что не воспроизводится ошибка
Воспроизводится на любом. Честно говоря, не понял, почему столько разговоров на эту тему. Ну перемножили два ненулевых числа, получив ноль. Никакой магии.
Такой код же все понимают?
Тут абсолютно аналогичная ситуация, когда d превращается в ноль.
Никакой магии.
вот в чем магия, распринтовал так:
2019.10.28 16:25:28.643 tst1 (EURUSD,H4) ULongDouble.d != ULongDouble.d true
2019.10.28 16:25:28.643 tst1 (EURUSD,H4) b_value = true
2019.10.28 16:25:28.643 tst1 (EURUSD,H4) d_value = nan
2019.10.28 16:25:28.667 tst1 (EURUSD,H4) zero divide in 'tst1.mq5' (28,31)
Тут абсолютно аналогичная ситуация, когда d превращается в ноль.
я про не ноль речь веду, в Вашем примере когда 0.1 * Num ? это bool - то это тупо наличие хоть одного бита в 8 байтах double
а когда 0.1 * Num это double, то при потере точности можно вылететь в Nan и получить zero divide
DBL_MIN - не минимальный положительный double.
DBL_MIN - не минимальный положительный double.
Думаю у второго числа невалидный double формат, но оно все равно валидируется и в принте и в операциях. возможно из-за этого и сыплется.
Вот этого не понял.
DBL_MIN - не минимальный положительный double.
ну сравните DBL_MIN с NaN - результат же в bool будет?
а если делить 1.0 на не число, то как выше сказали, то получим исключение
в общем то, что писали много раз разработчики, что сравнивать на больше/меньше/равно double не корректно - это правда, можно иногда на не число попасть и результат сравнения будет не предсказуемый