Хотя Вы не указали конкретной ошибки, но по всей видимости имеете в виду обычную ситуацию с представлением и округлением вещественных чисел.
Почитайте ветку https://www.mql5.com/ru/forum/106739, там этот вопрос рассмотрен.
Renat:
Собственно ошибкой я считал, появление 1 в 16-ой цифре после запятой, после умножения целого числа (в примере 13777) на 0,0001 или появления 9-ок в 5-ой цифре после запятой, после умножения целого числа (в примере 2755) на 0,0005, когда с математической точки зрения это невозможно, спасибо за ссылку, буду использовать функцию NormalizeDouble для округления чисел, после умножения.
Хотя Вы не указали конкретной ошибки, но по всей видимости имеете в виду обычную ситуацию с представлением и округлением вещественных чисел.
Почитайте ветку https://www.mql5.com/ru/forum/106739, там этот вопрос рассмотрен.
Собственно ошибкой я считал, появление 1 в 16-ой цифре после запятой, после умножения целого числа (в примере 13777) на 0,0001 или появления 9-ок в 5-ой цифре после запятой, после умножения целого числа (в примере 2755) на 0,0005, когда с математической точки зрения это невозможно, спасибо за ссылку, буду использовать функцию NormalizeDouble для округления чисел, после умножения.
Это как раз то, о чем я говорил.
Никакой ошибки нет - это проявление погрешности представления вещественных чисел. Это не зависит от языка программирования.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте, в процессе тестирования обнаружил ошибку, возникающую в значащих цифрах при умножении на десятичные дроби:
double price;
price=MathRound(SymbolInfoDouble(Symbol(), SYMBOL_ASK)/m_adjusted_point)*m_adjusted_point;
RPrice=MathRound(price/0.0005)*0.0005;
printf("Price, %1.25f, %1.25f, %1.25f, %1.25f",price,RPrice,MathRound(SymbolInfoDouble(Symbol(), SYMBOL_ASK)/m_adjusted_point),m_adjusted_point);