Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Boris
3943
Boris  
dimeon:

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

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

У него другой случай: ему не хочется употреблять DoubleToString() для комментов! Свои тараканы! ;)
Алексей Тарабанов
7326
Алексей Тарабанов  
Если Bid/Ask и им подобные возвращают не нормализованные значения, то это серьезна проблема. 
Slava
Модератор
6927
Slava  
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 хранится точно, так как представляет из себя степень двойки.

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий