Два соседних BookEvent могут дублировать стакан - страница 2

 
Dina Paches:

А особенности чисел типа double

А с ними какой-то подвох?
 
fxsaber:
А с ними какой-то подвох?

Если их сравнивать не применяя нормализацию при сравнении (или же, с помощью другого способа: сравнение разницы между двумя числами с какой-то малой величиной, задающей точность сравнения), то, да, есть вероятность получить не верный результат сравнения.

За счёт особенностей чисел типа double, как таковых сами по себе.

 
Dina Paches:

Если их сравнивать не применяя нормализацию при сравнении (или же, с помощью другого способа: сравнение разницы между двумя числами с какой-то малой величиной, задающей точность сравнения), то, да, есть вероятность получить не верный результат сравнения.

За счёт особенностей чисел типа double, как таковых сами по себе.

Описываемый Вами случай

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

void Miracle( const double a, const double b)
{
  Alert(((a == b) ? "Равны:" : "Не равны") + TOSTRING(a) + TOSTRING(b));
}

void OnStart()
{
  Miracle(0.35, 0.35);
  Miracle(0.35, 35 * 0.01);     
}

Никак не касается сравнения идентичных double, как бы это не представлялось.

 
fxsaber:

Описываемый Вами случай

Никак не касается сравнения идентичных double, как бы это не представлялось.

Какое-либо из идентичных чисел типа double, после пути к моменту сравнения, может быть отличающимся по цифрам в конечных знаках. Числа этого типа "нежны и требовательны к уходу за ними".

 

P./S.: Ссылки у меня в постах в этой теме - это движок форума автоматом ставил по ключевым словам. А поскольку по этим ссылкам есть про сравнение чисел этого типа, то не удаляла их 

 
Dina Paches:

Какое-либо из идентичных чисел типа double, после пути к моменту сравнения, может быть отличающимся по цифрам в конечных знаках. Числа этого типа "нежны и требовательны к уходу за ними".

Может. Тогда эти double не идентичны. Какое отношение все это имеет к данной ветке?
 
fxsaber:
Может. Тогда эти double не идентичны. Какое отношение все это имеет к данной ветке?

Я там постскриптум ещё добавила. Ваш пост ещё не видела к тому моменту.

Идентичные double могут становиться не идентичными. За счёт особенностей своего типа. А про отношение к ветке - так...: А универсальное решение сравнения любых массивов?: https://www.mql5.com/ru/forum/95527#comment_2819814

 
Dina Paches:

А универсальное решение сравнения любых массивов?: https://www.mql5.com/ru/forum/95527#comment_2819814

Так и остается универсальным. Например, в первом посте ветки сравниваются массивы MqlBookInfo, где одно из полей double. И никаких проблем.

У Вас не выйдет, при всем желании, создать пример, когда предложенный способ сравнения выдаст ошибку. 

 
fxsaber:
Так и остается универсальным. Например, в первом посте ветки сравниваются массивы MqlBookInfo, где одно из полей double. И никаких проблем.
Для чисел типа double, если не применять при их сравнении варианты способов, описанных в Документации, эта функция может и не приносить, и приносить заметные или не заметные проблемы. То есть для них я бы не рискнула назвать её сейчас универсальной.
 
Dina Paches:
Для чисел типа double, если не применять при их сравнении варианты способов, описанных в Документации, эта функция может и не приносить, и приносить заметные или не заметные проблемы. То есть для них я бы не рискнула назвать её сейчас универсальной.
Боюсь, у Вас ошибочные представления. Попробуйте себе сами доказать
fxsaber:

У Вас не выйдет, при всем желании, создать пример, когда предложенный способ сравнения выдаст ошибку. 

 
fxsaber:

У Вас не выйдет, при всем желании, создать пример, когда предложенный способ сравнения выдаст ошибку. 

Увидела добавленную вами позже в пост эту фразу. А потом, пока писала ответ и пост следом

Мне самой себе доказывать это не надо. С проблемой при таком сравнении вы сможете столкнуться самостоятельно.

(_R(Array1[i]) != Array2[i]) 
Причина обращения: