![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
У чисел double нет никакой особенности. Никакой!
double - 8 байтов. И если эти 8 байтов с точностью до каждого бита совпадают (оператор ==), то эти double идентичны. Если не совпадают - нет.
Если Вы считаете, что (double)35*0.01 должен быть равен (double)0.35, потому что так в школе говорят. То это лишь Ваше желание и представление, что так якобы должно быть. Поэтому, чтобы Ваши (и многих других) представления не ломались, Вы делаете нормализацию при сравнении этих совершенно не совпадающих double. И получаете, конечно, их равенство. В Справке об этом и написано, только про школу там не договаривают.
Без намека на какую-либо снисходительность, в полном восхищении от Женской логики и упрямства! Удачи.
Когда нужно, что бы какие-либо "сигналы" в программе срабатывали там, где задумывалось и не срабатывали там, где не подразумевалось, применение нормализации значений может помогать получать результаты не "наоборот".
Если не применять, то можно получить/получать результаты, отличные от желаемых. При этом, имхо, логика и упрямство программы, не "видящей" (без применения при сравнении нормализации или какой-то малой величины, задающей точность сравнения), например, какие-то равные по значимым десятичным знакам числа - не зависит от того, что слово программа - женского рода.
Взаимно - удачи. И хорошего отдыха в выходные дни.
Плохо по-русски выразился. Вот так будет правильнее:
Чтобы понять, что два double идентичны, можно и нужно сравнивать их без нормализации.
Что Вы скажете по поводу нижеприведённого примера?
Что Вы скажете по поводу нижеприведённого примера?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Два соседних BookEvent могут дублировать стакан
fxsaber, 2016.09.17 00:33
У чисел double нет никакой особенности. Никакой!
double - 8 байтов. И если эти 8 байтов с точностью до каждого бита совпадают (оператор ==), то эти double идентичны. Если не совпадают - нет.
Если Вы считаете, что (double)35*0.01 должен быть равен (double)0.35, потому что так в школе говорят. То это лишь Ваше желание и представление, что так якобы должно быть. Поэтому, чтобы Ваши (и многих других) представления не ломались, Вы делаете нормализацию при сравнении этих совершенно не совпадающих double. И получаете, конечно, их равенство. В Справке об этом и написано, только про школу там не договаривают.
В Вашем примере first и third - это разные double-числа. Не идентичные то бишь. Если Вам хочется разные double считать "равными", Вы можете сравнивать нормализованную разность с нулем, как и делаете. Теперь Ваши double "равны" благодаря Вашему желанию. Ну это как говорить, что целые числа 1 и 5 "равны" между собой с точностью до 10-ти.
Я вот только не пойму, каким образом весь этот разговор относится к данной ветке?
Это - придирка к формулировкам
Чтобы понять, что два double идентичны,
И если эти 8 байтов с точностью до каждого бита совпадают (оператор ==), то эти double идентичны. Если не совпадают - нет.
Идентичными даблы будут только тогда, когда получены одним и тем же способом, в результате одних и тех же вычислительных операций. Если Вы можете гарантировать одинаковость получения сравниваемых вещественных чисел, тогда да, можно использовать простое сравнение.
Это - придирка к формулировкам
Идентичными даблы будут только тогда, когда получены одним и тем же способом, в результате одних и тех же вычислительных операций. Если Вы можете гарантировать одинаковость получения сравниваемых вещественных чисел, тогда да, можно использовать простое сравнение.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Два соседних BookEvent могут дублировать стакан
fxsaber, 2016.09.16 16:18
А универсальное решение сравнения любых массивов?так вот подобные придирки на пустом месте в состоянии довести ситуацию до абсурда - передавать указатель на bool-функцию сравнения T-типа. И она должна быть даже для int-ов.
Придраться можно всегда. А так смотрим самый первый пост, который рабочий на все 100%. Там MqlBookInfo (содержащий double) сравниваются между собой именно так, как надо - без нормализации. Тему нормализации изучил вдоль и поперек.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Альтернативные реализации стандартных функций/подходов
fxsaber, 2016.09.02 10:58
Теперь работает всегда правильно, но быстрее оригинала всего на 10%prostotrader, Спасибо за найденные несоответствия!Так что предлагаю тему сравнения double закончить в данной ветке, т.к. оффтоп полный.
Билд 1432 - дублей стакана не обнаружил. Спасибо!
У меня не загружается 1432 :(
Прикрепи, плиз в ZIP
У меня не загружается 1432 :(
Прикрепи, плиз в ZIP
Получил в частном порядке, поэтому не могу. Дождитесь ближайшего обновления.