| / | Форум |
|
Sergo
16.10.2006 21:33
Уважаемые разработчики!
Ответьте, пожалуйста, на такой вопрос. Корректно ли проверять равенство двух чисел типа double после их нормализации функцией NormalizeDouble до одинакового количества знаков после запятой? Дело в том, что функция, приводящая оба числа к целому виду перед сравнением, которая используется у меня в эксперте, занимает довольно много процессорного времени. Хотелось бы сделать максимально быстро, но правильно. Что посоветуете? Конечно, при каждом тике в реал-тайме это малозаметно. Но тестер начинает довольно долго рассчитывать при моделировании. Хочется писать как можно более грамотнее. Так мне приятнее как программисту. Очень надеюсь на ответ! |
|
Бесплатная Groupware для групп разработчиков Установите систему групповой работы TeamWox и объедините усилия всех разработчиков. Это поможет вашей команде работать быстрее и организованнее. Благодаря TeamWox станет намного проще ставить задачи и контролировать их выполнение. |
3651 |
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); } |
|
Sergo
16.10.2006 22:22
Всё предельно ясно!
Спасибо! |
|
alex_ant
21.08.2008 22:17
Renat писал (а) >>
Лучше всего сравнивать дельту после вычитания или делать сравнение на допустимую дельту. У нас в стандартной поставке в stdlib.mq4 есть специальная функция: Значит ли это, что вместо цифры 8 в NormalizeDouble можно указать встроенную переменную Digits, привязав тем самым точность вычисления к используемой валютной паре? Например так: bool Equal(double FirstValue, double SecondValue) { if (NormalizeDouble(FirstValue - SecondValue, Digits) == 0) { return(true); } else { return(false); } } Смогу ли я с помощью этой функции сравнивать к примеру StopLoss разных ордеров, и при этом забыв о разрядности различных валютных пар? |
|
alex_ant
21.08.2008 22:34
Я тут немного развил тему... пригодно ли это для использования? bool Equal(double FirstValue, double SecondValue) { if (NormalizeDouble(FirstValue - SecondValue, Digits) == 0) { return(true); } else { return(false); } } bool LessOrEqual(double FirstValue, double SecondValue) { if ((FirstValue < SecondValue) || Equal(FirstValue, SecondValue)) { return(true); } else { return(false); } } bool GreaterOrEqual(double FirstValue, double SecondValue) { if ((FirstValue > SecondValue) || Equal(FirstValue, SecondValue)) { return(true); } else { return(false); } } bool Less(double FirstValue, double SecondValue) { if ((FirstValue < SecondValue) && !Equal(FirstValue, SecondValue)) { return(true); } else { return(false); } } bool Greater(double FirstValue, double SecondValue) { if ((FirstValue > SecondValue) && !Equal(FirstValue, SecondValue)) { return(true); } else { return(false); } } |
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий