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

 
Dina Paches:

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

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

Аргументируйте, пожалуйста.
 
P./S.:  Если бы при сравнении чисел из массивов я не применяла нормализацию, то некоторые мои программы работали бы не корректно в плане ожидаемых результатов по итогам сравнения.
 

В Справке не просто так говорится, что нужно при сравнении чисел этого типа применять варианты тех способов, что там описаны.

Поверьте, что это не проявление неуважения, что не хочу доказывать, что рекомендуемое в Справке - верно.  

 

Dina Paches:
P./S.:  Если бы при сравнении чисел из массивов я не применяла нормализацию, то некоторые мои программы работали бы не корректно в плане ожидаемых результатов.

В Справке не просто так говорится, что нужно при сравнении чисел этого типа применять варианты тех способов, что там описаны.

Это не аргументация. Создайте пример, вроде, моего. У Вас не получится. Идентичные double можно и нужно сравнивать без нормализации.
 
fxsaber:
Это не аргументация. Создайте пример, вроде, моего. У Вас не получится. Идентичные double можно и нужно сравнивать без нормализации.

Идентичные double могут становиться не идентичными. За счёт особенностей своего типа. У меня "получалось" при конструировании кодов видеть не те результаты, что "ожидала", если не применяла нормализацию.

Вы можете посмотреть инфу по поиску. На эту тему, по крайней мере на четвёртом форуме, много было написано-приводилось, насколько помню.

Либо сами, рано или поздно, на практике самостоятельно с этим сможете "столкнуться" (тем более, что обладаете пытливым умом).

Я здесь только несколько ссылок из "старых" приведу:

 https://www.mql5.com/ru/forum/133470

https://www.mql5.com/ru/forum/131853 

https://www.mql5.com/ru/articles/1561  

Почему 0.0039 > 0.0039 и 0.0039 >= 0.0039 одинаковы (t) - MQL4 форум
Почему 0.0039 > 0.0039 и 0.0039 >= 0.0039 одинаковы (t) - MQL4 форум
  • www.mql5.com
Почему 0.0039 > 0.0039 и 0.0039 >= 0.0039 одинаковы (t) - MQL4 форум
 
Dina Paches:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

fxsaber, 2016.09.16 20:35

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

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

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


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

Результат

2016.09.17 00:15:19.665 Test (RTS-12.16,H1)     Не равны a = 0.35 b = 0.35
2016.09.17 00:15:19.665 Test (RTS-12.16,H1)     Равны: a = 0.35 b = 0.35
Еще раз повторяю
fxsaber:
Это не аргументация. Создайте пример, вроде, моего. У Вас не получится. Идентичные double можно и нужно сравнивать без нормализации.
 
fxsaber:

Идентичные double можно и нужно сравнивать без нормализации.

А зачем их сравнивать если известно что они идентичные?
 
Andrey Barinov:
А зачем их сравнивать если известно что они идентичные?

Плохо по-русски выразился. Вот так будет правильнее:

Чтобы понять, что два double идентичны, можно и нужно сравнивать их без нормализации. 

 
fxsaber:

Плохо по-русски выразился. Вот так будет правильнее:

Чтобы понять, что два double идентичны, можно и нужно сравнивать их без нормализации. 

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

 https://www.mql5.com/ru/docs/basis/types/double

Я вам напомнила об особенностях чисел типа double, когда увидела этот пост:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

fxsaber, 2016.09.16 16:18

А универсальное решение сравнения любых массивов?
template <typename T>
bool ArrayEqual( const T &Array1[], const T &Array2[] )
{
  const int Amount = ArraySize(Array1);
  bool Res = (Amount == ArraySize(Array2));

  if (Res)
    for (int i = 0; i < Amount; i++)
      if (_R(Array1[i]) != Array2[i]) // https://www.mql5.com/ru/code/16280
      {
        Res = false;

        break;
      }

  return(Res);
}

 

Требование с меня примера не считаю объективным.

Тем более, что у меня в постах ранее, в этой теме, есть ссылки на Справку + ссылки "на вскидку" + вы сами можете воспользоваться поиском по сайту + рано или поздно скорее всего убедитесь самостоятельно.

 

Ваше право считать иначе.

 

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

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Основы языка / Типы данных / Вещественные типы (double, float) - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Dina Paches:

Если под идентичны вы подразумеваете их какое-либо равенство друг другу (по типам, значениям и что к числам не применялась явная математическая операция), то не применяя при сравнении NormalizeDouble или другой способ, описанный в Справке, рано или поздно вы столкнётесь с особенностью чисел double. Поскольку какое-либо из идентичных чисел этого типа, после пути к моменту сравнения, может стать отличающимся в по цифрам в конечных знакахhttps://www.mql5.com/ru/docs/basis/types/double

Я вам напомнила об особенностях чисел типа double, когда увидела этот пост:

У чисел double нет никакой особенности. Никакой!

double - 8 байтов. И если эти 8 байтов с точностью до каждого бита совпадают (оператор ==), то эти double идентичны. Если не совпадают - нет.

Если Вы считаете, что (double)35*0.01 должен быть равен (double)0.35, потому что так в школе говорят. То это лишь Ваше желание и представление, что так якобы должно быть. Поэтому, чтобы Ваши (и многих других) представления не ломались, Вы делаете нормализацию при сравнении этих совершенно не совпадающих double. И получаете, конечно, их равенство. В Справке об этом и написано, только про школу там не договаривают.

Требование с меня примера не считаю объективным.

Тем более, что у меня в постах есть ссылки на Справку + ссылки "на вскидку" + вы сами можете воспользоваться поиском по сайту + рано или поздно скорее всего убедитесь самостоятельно.

 

Ваше право считать иначе.

 

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

Без намека на какую-либо снисходительность, в полном восхищении от Женской логики и упрямства! Удачи.
Причина обращения: