И снова билд 226

 
Нашел некорректность в тестере. Иногда, результат вычитания числа из самого себя равен минус ноль. Явление плавающее. Логика эксперта становится неоднозначной. Прилагаю эксперт, ловящий и демонстрирующий это.
Файлы:
 
Нашел некорректность в тестере. Иногда, результат вычитания числа из самого себя равен минус ноль. Явление плавающее. Логика эксперта становится неоднозначной. Прилагаю эксперт, ловящий и демонстрирующий это. Запускать на минутках.
Файлы:
 
Speeqoolyant:
Нашел некорректность в тестере. Иногда, результат вычитания числа из самого себя равен минус ноль. Явление плавающее. Логика эксперта становится неоднозначной. Прилагаю эксперт, ловящий и демонстрирующий это. Запускать на минутках.


Билд здесь ни причем. Нужно менять логику сравнения.

Это очень плохая идея проверять полное равенство двух вещественных чисел. К тому же, OrderOpenPrice() не обязано возвращать нормализованное число. В документации про это ничего не сказано. Поэтому при вашем вычитании

NormalizeDouble(OrderOpenPrice(),Digits) - OrderOpenPrice() Вы получаете, как правило, "потерю точности", но не ноль.

 
Mislaid:


Билд здесь ни причем. Нужно менять логику сравнения.

Это очень плохая идея проверять полное равенство двух вещественных чисел. К тому же, OrderOpenPrice() не обязано возвращать нормализованное число. В документации про это ничего не сказано. Поэтому при вашем вычитании

NormalizeDouble(OrderOpenPrice(),Digits) - OrderOpenPrice() Вы получаете, как правило, "потерю точности", но не ноль.

Отложенник четыре знака. преобразовался в позицию, те же четыре знака. Все цифры в цене совпадают. При нормализации убираются лишние, а в не нормализованной - лишних изначально не былою Откуда неравенство? Или арифметику отменили?

А по поводу проверки равенства двух вещественных чисел, что 2 != 2 или 1,2345 != 1,2345 ?

И еще одно : эффект то плавающий, то есть, то нету.

Я думаю, где-то некорректно чистится мусор.

Хотелось-бы патчик на этот косяк.

 
Speeqoolyant:

Отложенник четыре знака. преобразовался в позицию, те же четыре знака. Все цифры в цене совпадают. При нормализации убираются лишние, а в не нормализованной - лишних изначально не былою Откуда неравенство? Или арифметику отменили?

А по поводу проверки равенства двух вещественных чисел, что 2 != 2 или 1,2345 != 1,2345 ?

И еще одно : эффект то плавающий, то есть, то нету.

Я думаю, где-то некорректно чистится мусор.

Хотелось-бы патчик на этот косяк.



А как Вы убедились что все цифры в цене совпадают?

Например 3.0 это на самом деле 2.9999999999 или же 3.00000001. При сравнении они естественно друг другу не равны. И их разность может равняться нуль, может быть положительной, и может быть отрицательной. Для получения корректного результата нужно нормализировать цены, о чем Вам выше писали.

 
Vinin:


А как Вы убедились что все цифры в цене совпадают?

Например 3.0 это на самом деле 2.9999999999 или же 3.00000001. При сравнении они естественно друг другу не равны. И их разность может равняться нуль, может быть положительной, и может быть отрицательной. Для получения корректного результата нужно нормализировать цены, о чем Вам выше писали.


Т.е. если я выставляю ордер по 1,2345, то на самом деле его цена 1,234499999999999 или 1,2345000000000001, так что ли.

А как же тогда MarketInfo(Symb,MODE_DIGITS)==4 ?

 
Speeqoolyant:

Т.е. если я выставляю ордер по 1,2345, то на самом деле его цена 1,234999999999999 или 1,2345000000000001, так что ли.

А как же тогда MarketInfo(Symb,MODE_DIGITS)==4 ?

Вы б че-нить по программированию и информитике прочитали то - Вы ж элементарных вещей не знаете. И научились пользоваться поиском - это сотню раз обсуждалось.
 
VladislavVG:
Вы б че-нить по программированию и информитике прочитали то - Вы ж элементарных вещей не знаете. И научились пользоваться поиском - это сотню раз обсуждалось.

Это каждый может поставить себя на пьедестал и оттуда вещать.

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

Для трейдинга не нужно представлять разницу цен с точностью, не различимой в одиннадцатом знаке после запятой. С учетом свопов, достаточно семи знаков.

Остальное - мусор, который надо корректно вычищать после вычислений. Тогда бы не возникла эта тема.

Кстати, Владислав, это не вы написали программы, которыми пользуется весь мир. (В смысле - не учите меня жить)

 
Speeqoolyant:

Это каждый может поставить себя на пьедестал и оттуда вещать.

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

Для трейдинга не нужно представлять разницу цен с точностью, не различимой в одиннадцатом знаке после запятой. С учетом свопов, достаточно семи знаков.

Остальное - мусор, который надо корректно вычищать после вычислений. Тогда бы не возникла эта тема.

Кстати, Владислав, это не вы написали программы, которыми пользуется весь мир. (В смысле - не учите меня жить)

Ты хоть почитай, как представляются вещественные числа в памяти.

И для чего нужен NormalizeDouble (в поиск).

Потом уж обвиняй всех в некомпетентности

 
Speeqoolyant:
Для трейдинга не нужно представлять разницу цен с точностью, не различимой в одиннадцатом знаке после запятой. С учетом свопов, достаточно семи знаков.

Остальное - мусор, который надо корректно вычищать после вычислений.

Так тебе и напомнили об очистке вещественного числа от мусора путём его нормализации.
 

2 Diamant && 2 goldtrader.

Что-то не помню, ребята, чтоб мы с вами вместе водку пили. Драгоценные вы мои.

Эк вы как все дружно ! Я понимаю - новенький. всякий, там, корпоративный дух, и т.д.

Вашу позицию в рассматриваемом вопросе понял. Для прогера она правильная, согласен. Но для нормального человека, с реальным (вещественным) восприятием мира, которому по сараю, как в памяти компьютера представляется

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

Кто хотел услышать, услышал.

Считаю тему исчерпанной.

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