Будет ли if всегда работать в этом коде? или возможны ошибки:
- Нормализовка данных.
- Тестер: ошибка моделирования тиков на всех таймфреймах на модели все тики
- Помогите разобраться - неправильно работает if
Почему народ всегда пытается изобрести велосипед?
Ведь есть же следующая простая конструкция для сравнения?
Ведь есть же следующая простая конструкция для сравнения?
double a,b; if(MathAbs(a-b)>0) {числа не равны................} else {числа равны..............}
solandr писал (а):
Почему народ всегда пытается изобрести велосипед?
Ведь есть же следующая простая конструкция для сравнения?
Почему народ всегда пытается изобрести велосипед?
Ведь есть же следующая простая конструкция для сравнения?
double a,b; if(MathAbs(a-b)>0) {числа не равны................} else {числа равны..............}
Величины a и b не задаются, а вычисляются. Я видел много обсуждений про double - где после вычислений 0 не 0, а 3,5 не 3,5.
И если это так, то в Вашем примере практически всегда будет MathAbs(a-b)>0 на величину "мусора". Или я ошибаюсь?
Уточню, может пример был не удачный: при вычислениях величина a должна быть равна в некоторых случаях 0. Но из-за свойств double может отличаться от 0 на величину "мусора" далеко за запятой (последние разряды). Я так понял, что именно из-за этого просто так сравнивать double нельзя. И Ваше предложение MathAbs(a-b)>0 даст тот же результат?
Bookkeeper писал (а):
Будет ли if всегда работать в этом коде? или возможны ошибки:
Будет ли if всегда работать в этом коде? или возможны ошибки:
double a=0.0123456; double b=NormalizeDouble(a,0); if(b==0.0) { ........... }
Не вижу смысла в таком вопросе. Ну отвечу я, что всегда будет работать, а оно возьми да и не сработай где-нить когда-нить. Проверяйте, делайте постановку задачи, ставьте эксперимент и сами отвечайте на свой вопрос. Кто бы и что бы Вам не ответил, всё равно надо проверять как бы этого не хотелось.
KimIV писал (а):
Не вижу смысла в таком вопросе. Ну отвечу я, что всегда будет работать, а оно возьми да и не сработай где-нить когда-нить. Проверяйте, делайте постановку задачи, ставьте эксперимент и сами отвечайте на свой вопрос. Кто бы и что бы Вам не ответил, всё равно надо проверять как бы этого не хотелось.
Спасибо :).
Bookkeeper писал (а):
Будет ли if всегда работать в этом коде? или возможны ошибки:
Будет ли if всегда работать в этом коде? или возможны ошибки:
double a=0.0123456; double b=NormalizeDouble(a,0); if(b==0.0) { ........... }
Не вижу смысла в таком вопросе. Ну отвечу я, что всегда будет работать, а оно возьми да и не сработай где-нить когда-нить. Проверяйте, делайте постановку задачи, ставьте эксперимент и сами отвечайте на свой вопрос. Кто бы и что бы Вам не ответил, всё равно надо проверять как бы этого не хотелось.
Bookkeeper писал (а):
Величины a и b не задаются, а вычисляются. Я видел много обсуждений про double - где после вычислений 0 не 0, а 3,5 не 3,5.
И если это так, то в Вашем примере практически всегда будет MathAbs(a-b)>0 на величину "мусора". Или я ошибаюсь?
Уточню, может пример был не удачный: при вычислениях величина a должна быть равна в некоторых случаях 0. Но из-за свойств double может отличаться от 0 на величину "мусора" далеко за запятой (последние разряды). Я так понял, что именно из-за этого просто так сравнивать double нельзя. И Ваше предложение MathAbs(a-b)>0 даст тот же результат?
Величины a и b не задаются, а вычисляются. Я видел много обсуждений про double - где после вычислений 0 не 0, а 3,5 не 3,5.
И если это так, то в Вашем примере практически всегда будет MathAbs(a-b)>0 на величину "мусора". Или я ошибаюсь?
Уточню, может пример был не удачный: при вычислениях величина a должна быть равна в некоторых случаях 0. Но из-за свойств double может отличаться от 0 на величину "мусора" далеко за запятой (последние разряды). Я так понял, что именно из-за этого просто так сравнивать double нельзя. И Ваше предложение MathAbs(a-b)>0 даст тот же результат?
На самом деле действительно ваш пример был неудачен. В своём коде мне приходится использовать проверку 2х double только лишь при сравнения цен например расчётной цены с ценой отложника. И в таком случае я делаю следующим образом:
double a,b; if(MathAbs(a-b)>0.9*Point) {цены не равны - двигаем отложник.......} else {цены равны - не двигаем отложник.........}
Renat 16.10.2006 22:17
Лучше всего сравнивать дельту после вычитания или делать сравнение
на допустимую дельту. У нас в стандартной поставке в stdlib.mq4 есть
специальная функция:
//+------------------------------------------------------------------+ //| right comparison of 2 doubles | //+------------------------------------------------------------------+ bool CompareDoubles(double number1,double number2) { if(NormalizeDouble(number1-number2,8)==0) return(true); else return(false); }
Ближе к телу. Я подумывал о нечто типа a/Point и после этого аж 4-ый
знак.
Но это все-таки не мусор. Могут получиться дыры. Индюк в подвале. Сигнальная или существует - больше/меньше нуля, или 0 - сигнала нет. Наверно надо присваивать EMPTY_VALUE.
Но это все-таки не мусор. Могут получиться дыры. Индюк в подвале. Сигнальная или существует - больше/меньше нуля, или 0 - сигнала нет. Наверно надо присваивать EMPTY_VALUE.
Ну вот видете Игорь, вопрос-провокация не всегда напрасен. Один ум хорошо (да и то - если есть), а ...
Есть проблема - значит на эти грабли уже кто-нибудь да наступал :). И выложит работающие решения. Или решение появиться в результате. Во всяком случае теперь можно и подумать, а не сразу трясти.
Всем спасибо за терпение.
Bookkeeper писал (а):
Ну вот видете Игорь, вопрос-провокация не всегда напрасен. Один ум хорошо (да и то - если есть), а ...
Есть проблема - значит на эти грабли уже кто-нибудь да наступал :). И выложит работающие решения. Или решение появиться в результате. Во всяком случае теперь можно и подумать, а не сразу трясти.
Всем спасибо за терпение.
Удачи!
Ну вот видете Игорь, вопрос-провокация не всегда напрасен. Один ум хорошо (да и то - если есть), а ...
Есть проблема - значит на эти грабли уже кто-нибудь да наступал :). И выложит работающие решения. Или решение появиться в результате. Во всяком случае теперь можно и подумать, а не сразу трясти.
Всем спасибо за терпение.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь