Ошибки, баги, вопросы - страница 2821
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
нормализация это не округление
На пять с плюсом знаю теорию, как работать с double и прочее. Алгоритм NormalizeDouble содержит ошибку. Поднятая тема только косвенно касается сравнения даблов.
Повторяю свой вопрос.
На снимке видно значение не нормализованной переменной n и нормализованной m и на сколько они отличаются. Но если вы хотите сравнивать стринги, то это уже ваше предпочтение.
На пять с плюсом знаю теорию, как работать с double и прочее. Алгоритм NormalizeDouble содержит ошибку. Поднятая тема только косвенно касается сравнения даблов.
Алгоритм NormalizeDouble содержит ошибку.
да
кажется A100 писал об этом
но разработчики с момента появления MQL придерживаются этой "особенности", увы
Если поправят, ошибка исчезнет.
думаю появятся другие баги и будет очень много шума )))
Не появятся, т.к. почти все сравнивают даже нормализованные даблы через нормализацию. Т.е. ставят ее куда попало.
Правильная нормализация всегда должна давать true в этом условии.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2020.08.10 11:37
Это единственная проверка правильности нормализации. Если будет выдавать всегда true, то ничего сломаться не сможет.
NormalizeDouble - это просто определенный алгоритм, который применяется к double-числу. К сожалению, в нем ошибка. Если поправят, ошибка исчезнет. От этого double-представления всех остальных никак не поменяются.
Да вроде тут дело не в функции, а в том, что константы не нормализуются компилятором (хотя следовало бы).
Тогда одни те же константы в DLL и MQL будут не совпадать.
Тогда одни те же константы в DLL и MQL будут не совпадать.
Тоже верно. Да и к тому же любая нормализация - это потеря точности, поэтому я пожалуй погорячился с нормализацией констант.
Просто подправить текущий алгоритм нормализации.
Просто подправить текущий алгоритм нормализации.
даже не знаю, является ли это ошибкой алгоритма.
Только округление не через штатные round(), ceil(), floor() т.к. они тоже возвращают double.Действительно, нельзя сравнивать double. Просто жёсткое правило.
Или, как говорит Слава, через эпсилон или через умножение (например на 1/_Point) с преобразованием в int c округлением.
А через эти, тем более они работают быстрее штатных:
Проще и быстрее, конечно же, через эпсилон: