Double vs FLOAT - непонятная ошибка MathFloor - страница 3

 
Andrey F. Zelinsky:
потому что https://www.mql5.com/ru/docs/convert/normalizedouble

Нужно иметь в виду, что нормализованное число при выводе в Журнал с помощью Print() может содержать большее количество знаков после запятой, чем вы ожидаете. Например,

 

тогда и в comment то же 

 
fxsaber:
#define TOSTRING(A) #A + " = " + (string)(A) + " "

void OnStart()
{
  double Price1 = 105143;
  double Price2 = Price1 - 1e-11;

  Print(TOSTRING(Price1) + TOSTRING(MathFloor(Price1)) +
        TOSTRING(Price2) + TOSTRING(MathFloor(Price2)) +
        TOSTRING(Price1 > Price2));
}
Результат
Price1 = 105143.0 MathFloor(Price1) = 105143.0 Price2 = 105143.0 MathFloor(Price2) = 105142.0 Price1>Price2 = true
Не надо распринтовку double-чисел воспринимать буквально.

 

Спасибо. наверно я все таки находил нужное решение, но из-за неправильной распринтовки грешил на ошибку.!  

 

Остаток от деления одного ненормализованного числа на другое ненормализованное число, результат в любом случае ненормализованный.

Эту функцию вообще надо убрать из языка, что бы не травмировать не окрепшие психики. 

 
Vladislav Andruschenko:

наверно я все таки находил нужное решение 

К сожалению, Ваш код - демонстрация полного непонимания того, что делаете. Попробуйте разобраться в вопросе.
 
Dmitry Fedoseev:

Остаток от деления одного ненормализованного числа на другое ненормализованное число, результат в любом случае ненормализованный.

Эту функцию вообще надо убрать из языка, что бы не травмировать не окрепшие психики. 

Дык у меня все нормализовано. Вот в ч ем прикол. 
 
Vladislav Andruschenko:
Дык у меня все нормализовано. Вот в ч ем прикол. 
Вы делаете лишние преобразования, которые приводят к потере знаков.

Делайте нормализацию только перед непосредственным использованием результатов вычислений. Перед этим избегайте по возможности все приведения чисел и преобразования.
 
Andrey Dik:
Вы делаете лишние преобразования, которые приводят к потере знаков.
Это уже отчаянные коды..... Я делал по разному. Но как сказал выше. Наверно из-за неправильно принята я грешил на ошибку. Хотя и в коде эти переменные были с глюком. 

Спасибо всем за помощь и предложенные варианты. Но с float все работает четко. 
 
Vladislav Andruschenko:
с float все работает четко. 
Одна из самых плохих рекомендаций - переход с double на float.
 
Vladislav Andruschenko:
Дык у меня все нормализовано. Вот в ч ем прикол. 
В каком же неведомом месте оно нормализовано?
 
Vladislav Andruschenko:
Это уже отчаянные коды..... Я делал по разному. Но как сказал выше. Наверно из-за неправильно принята я грешил на ошибку. Хотя и в коде эти переменные были с глюком. 

Спасибо всем за помощь и предложенные варианты. Но с float все работает четко. 
float это кастрация чисел не дающая никаких преимуществ. Лучше разберитесь со всеми потерями в преобразованиях и используйте наивысшую из возможных точностей - double.