Сранение вещественных чисел.
Поиск рулит...
Поиск рулит...
А кроме "поиск рулит" других вариантов нет? Я не знаю что такое "вещественных", кроме средней школы у меня другого образования нет. В институте я не учился, точнее учился, но вылетел после первой сессии. А после института зарабатывал на жизнь забрасыванием щебенки в бетономешалку. Но даже мои скудные познания в математике подсказывают мне что 1.2733 и 1.2733 это одинаковые числа, или я не прав? На калькуляторе проверил, при вычитании получается ноль. Я простой смертный а не Альберт Энштейн, и 5918 сообщений на форуме еще не написал. Если отвечать не хочется, то лучше промолчать, может кто то сталкивался с этим и подскажет. Я уже неделю ошибку ищу, несколько раз код эксперта переписывал. По поиску "сравнение вещественных чисел" ничего не находит. Если оператор if неправильно сравнивает числа, то я вижу только один выход, исправить ошибку компилятора!
OniNePriletyat:
А кроме "поиск рулит" других вариантов нет? Я не знаю что такое "вещественных", кроме средней школы у меня другого образования нет. В институте я не учился, точнее учился, но вылетел после первой сессии. А после института зарабатывал на жизнь забрасыванием щебенки в бетономешалку. Но даже мои скудные познания в математике подсказывают мне что 1.2733 и 1.2733 это одинаковые числа, или я не прав? На калькуляторе проверил, при вычитании получается ноль. Я простой смертный а не Альберт Энштейн, и 5918 сообщений на форуме еще не написал. Если отвечать не хочется, то лучше промолчать, может кто то сталкивался с этим и подскажет. Я уже неделю ошибку ищу, несколько раз код эксперта переписывал. По поиску "сравнение вещественных чисел" ничего не находит. Если оператор if неправильно сравнивает числа, то я вижу только один выход, исправить ошибку компилятора!
Не надо обижаться...А кроме "поиск рулит" других вариантов нет? Я не знаю что такое "вещественных", кроме средней школы у меня другого образования нет. В институте я не учился, точнее учился, но вылетел после первой сессии. А после института зарабатывал на жизнь забрасыванием щебенки в бетономешалку. Но даже мои скудные познания в математике подсказывают мне что 1.2733 и 1.2733 это одинаковые числа, или я не прав? На калькуляторе проверил, при вычитании получается ноль. Я простой смертный а не Альберт Энштейн, и 5918 сообщений на форуме еще не написал. Если отвечать не хочется, то лучше промолчать, может кто то сталкивался с этим и подскажет. Я уже неделю ошибку ищу, несколько раз код эксперта переписывал. По поиску "сравнение вещественных чисел" ничего не находит. Если оператор if неправильно сравнивает числа, то я вижу только один выход, исправить ошибку компилятора!
Я тоже не Энштейн, и не постил 6000 сообщений - это за статьи и коды =)
И, кстати, поиск результат даёт - посмотри
Просто я в предыдущем посте допустил ошибку, а ты скопировал оттуда текст и вставил в поиск =)))
В итоге - ошибся я, а не ты...
Спасибо. Не обижаюсь, нужно было самому внимательнее посмотреть
перед тем как копировать в поиск...
Как я понял нельзя сравнивать числа после . Вроде все понятно, а точнее ничего не понятно. Если после использования NormalizeDouble, оператор Print выводит два одинаковые числа, то за одним из них скрывается какое-то другое, как такое может быть? Где же собака порылась? В справке говориться что NormalizeDouble округляет числа с плавающей точкой до указанной точности, и ни слова по какие-то подводные камни. Ну не могу я понять как 1.2733>1.2733, подскажите!
Как я понял нельзя сравнивать числа после . Вроде все понятно, а точнее ничего не понятно. Если после использования NormalizeDouble, оператор Print выводит два одинаковые числа, то за одним из них скрывается какое-то другое, как такое может быть? Где же собака порылась? В справке говориться что NormalizeDouble округляет числа с плавающей точкой до указанной точности, и ни слова по какие-то подводные камни. Ну не могу я понять как 1.2733>1.2733, подскажите!
OniNePriletyat писал (а):
Если после использования NormalizeDouble, оператор Print выводит два одинаковые числа, то за одним из них скрывается какое-то другое, как такое может быть? Где же собака порылась? В справке говориться что NormalizeDouble округляет числа с плавающей точкой до указанной точности, и ни слова по какие-то подводные камни. Ну не могу я понять как 1.2733>1.2733, подскажите!
Если после использования NormalizeDouble, оператор Print выводит два одинаковые числа, то за одним из них скрывается какое-то другое, как такое может быть? Где же собака порылась? В справке говориться что NormalizeDouble округляет числа с плавающей точкой до указанной точности, и ни слова по какие-то подводные камни. Ну не могу я понять как 1.2733>1.2733, подскажите!
Вот здесь в вашем коде
kk=Bid+(sltp*Point);
if(NewOpenOrder<kk)
вы производите перемножение 2х чисел sltp*Point, одно из которых точно double (Point) и далее нормализации не проводите!
А как эти числа перемножаются в компьютере - кто его знает? Вот здесь у вас и проявляется какая-то лишняя единичка в 31 знаке после запятой ;o)!
И поэтому NewOpenOrder<kk может выполняться совсем не так как вы думаете, глядя лишь на первые 4 знака после запятой.
OniNePriletyat:
Как я понял нельзя сравнивать числа после NormalizeDouble. Вроде все понятно, а точнее ничего не понятно. Если после использования NormalizeDouble, оператор Print выводит два одинаковые числа, то за одним из них скрывается какое-то другое, как такое может быть? Где же собака порылась? В справке говориться что NormalizeDouble округляет числа с плавающей точкой до указанной точности, и ни слова по какие-то подводные камни. Ну не могу я понять как 1.2733>1.2733, подскажите!
Просто все сравнения вставляй в НормализеДабл:Как я понял нельзя сравнивать числа после NormalizeDouble. Вроде все понятно, а точнее ничего не понятно. Если после использования NormalizeDouble, оператор Print выводит два одинаковые числа, то за одним из них скрывается какое-то другое, как такое может быть? Где же собака порылась? В справке говориться что NormalizeDouble округляет числа с плавающей точкой до указанной точности, и ни слова по какие-то подводные камни. Ну не могу я понять как 1.2733>1.2733, подскажите!
if ( NormalizeDouble( NewOpenOrder - kk, Digits ) < 0.0 )
komposter:
Я вот вчера очередную систему на МА делал, и с удивление обнаружил, что iMA возвращает значение с кто-знает-какой цифрой после запятой.
Ошибку в алгоритме отлавливал долго... =)
Теперь имею в виду, что индикаторы расчитываются более точно, чем отображаются ;)
Отображаются на графике с максимальной точностью (стандартный
double), а вот в выводе подсказок точность обычно ограничена 4 знаками.
Я вот вчера очередную систему на МА делал, и с удивление обнаружил, что iMA возвращает значение с кто-знает-какой цифрой после запятой.
Ошибку в алгоритме отлавливал долго... =)
Теперь имею в виду, что индикаторы расчитываются более точно, чем отображаются ;)
Добавил NormalizeDouble во всех переменных которые сравниваются в операторе if. Все работает
как нужно. Спасибо.
Renat:
Отображаются на графике с максимальной точностью (стандартный double), а вот в выводе подсказок точность обычно ограничена 4 знаками.
Да, я об этом и говорил.Отображаются на графике с максимальной точностью (стандартный double), а вот в выводе подсказок точность обычно ограничена 4 знаками.
Если чесно, не совсем понятно, зачем так сделано.
Есть точность - покажи её, нет - тогда обрезай.
Хотя, это не до конца обмозгованый вывод ;)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Уже третий месяц издеваюсь над брокером своим корявым кодом, вот решил найти причину.