Ошибка, возникающая в значащих цифрах при умножении

 

Здравствуйте, в процессе тестирования обнаружил ошибку, возникающую в значащих цифрах при умножении на десятичные дроби:

               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);


 

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

Хотя Вы не указали конкретной ошибки, но по всей видимости имеете в виду обычную ситуацию с представлением и округлением вещественных чисел.

Почитайте ветку https://www.mql5.com/ru/forum/106739, там этот вопрос рассмотрен.

NormalizeDouble VS MathRound - MQL4 форум
  • www.mql5.com
NormalizeDouble VS MathRound - MQL4 форум
 
Renat:

Хотя Вы не указали конкретной ошибки, но по всей видимости имеете в виду обычную ситуацию с представлением и округлением вещественных чисел.

Почитайте ветку https://www.mql5.com/ru/forum/106739, там этот вопрос рассмотрен.


Собственно ошибкой я считал, появление 1 в 16-ой цифре после запятой, после умножения целого числа (в примере 13777) на 0,0001 или появления 9-ок в 5-ой цифре после запятой, после умножения целого числа (в примере 2755) на 0,0005, когда с математической точки зрения это невозможно, спасибо за ссылку, буду использовать функцию NormalizeDouble для округления чисел, после умножения.
 

Это как раз то, о чем я говорил.

Никакой ошибки нет - это проявление погрешности представления вещественных чисел. Это не зависит от языка программирования.