Баг сложения чисел с плавающей запятой - страница 2

 
dimeon:

Писал советника под экзотику типа HKD/ZAR (как пример) цены 50.00001 т.е. 5 цифр после запятой. Ордера не открываются. GetLasterror выдает ошибку что-то типа 138. В новой справке такого кода нет! Внимательно почитал логи. Пишет неправильная цена. Каково же было мое удивление что цена Аск передается как 50,0000100. NormalizeDouble исправил эту ошибку. Но думаю не очень опытным прогерам это сильно осложнило бы жизнь... 

так что ваш пример это еще часть проблемы!  

У него другой случай: ему не хочется употреблять DoubleToString() для комментов! Свои тараканы! ;)
 
Если Bid/Ask и им подобные возвращают не нормализованные значения, то это серьезна проблема. 
 
Xenon:

Спец. для Вас накидал в VisualStudio пример:

 

В примере язык C#. На 100% уверен, что аналогичный результат будет и в С++ и в Java. Я уже не говорю про такие высокоуровневые языки как Паскаль, Бейсик, Ада и т.д. Да и вообще, по законам математики 0.7 + 0.1 = 0.8 и никакое другое число. ЛЮБОЙ калькулятор это выдаст. Просто бред какой-то с этим MQL4....

С какой точностью вывод?

У нас с включённым #property strict - %.16g

Если поставим %.15g, то вы будете получать 0.8, но от этого содержимое переменной типа double не изменится

Кстати, вот здесь https://docs.mql4.com/ru/basis/types/double мы упомянули как раз о числе 0.7

Например, числа 0.3 и 0.7 представлены в компьютере бесконечными дробями, в то время как число 0.25 хранится точно, так как представляет из себя степень двойки.

Причина обращения: