Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
берете калькулятор, пишите любое дробное число, жмете клавишу (1/Х) и если вы получаете не точное значение, то у вас будет число с хвостом.
с уважением.
Ммм-да. Интересный момент.
Калькулятора не надо, ответ элементарен: 1/(3,6,7,9)
Оччень интересный момент....
Ммм-да. Интересный момент.
Калькулятора не надо, ответ элементарен: 1/(3,6,7,9)
Оччень интересный момент....
с уважением.
Ммм-да. Интересный момент.
Калькулятора не надо, ответ элементарен: 1/(3,6,7,9)
Оччень интересный момент....
Это далеко не все, однако. Понятно, что 1/3 и 1/7 - бесконечные периодические дроби во всех системах счисления, у которых основание не кратно степени тройки (7). Также и в двоичной возникает беда с десятичными дробными числами, так как основание десятичной системы счисления (2 * 5) не кратно степени 2. Все хорошо, пока десятичное число является суммой нескольких степеней (1/2). Например, 0.28125 = 0.25 + 0.03125 = 0.5^2 + 0.5^5 записывается в двоичном виде как 2^(-5) * 0.01001 с конечным числом значащих цифр.
1/5 - бесконечная периодическая дробь в двоичном представлении. Из-за этого, в частности, десятичное число 0.1, представленное в IEEE 754 c двойной (double) точностью, равно 011111110111001100110011001100110011001100110011001100110010000. Чтобы убедиться, сделайте перевод в двоичную систему, например, с помощью вот этого онлайн калькулятора http://math.semestr.ru/inf/ieee754.php. В математике у повторений группы 1101 не было бы конца, но разрядность мантиссы ограничена.
Однако никто не смотрит, как записано число в двоичной форме, удобнее в десятичной. Преобразовывать число для такого просмотра приходится, по существу, два раза. И в десятичную систему счисления, и в строковое представление (ограниченное длиной приемной строки). На обоих этапах свои кочки, которые приводят к появлению "лишних" единиц или девяток или других цифр в конце строки-результата. Это общая причина возникающих неясностей при работе с числами с плавающей точкой. Всегда надо видеть в показываемом числе погрешность представления, которая может поменять желаемые цифры и вдалеке от конца строки, 5.9999999999999994 вместо 6, например.
Вторая неясность, с NormalizeDouble. Название функции противоречит стандартному пониманию (IEEE 754) нормализованных чисел. Эту особенность ввели MQ, зачем-то вместо обычного округления требующие при передаче некоторых параметров их предварительно "нормализовать". Надо использовать ее только там, где она явно требуется.
....
Вторая неясность, с NormalizeDouble. Название функции противоречит стандартному пониманию (IEEE 754) нормализованных чисел. Эту особенность ввели MQ, зачем-то вместо обычного округления требующие при передаче некоторых параметров их предварительно "нормализовать". Надо использовать ее только там, где она явно требуется.
я не вижу смысла вообще нормализовывать какие либо числа, по сути это сделать не возможно, так как сама машина вопреки нашему ЧЕЛОВЕЧЕСКОМУ смыслу приведет число не к целому какому то значению, а к приближенному. следовательно, как это принято работать с дробными, мы всегда, ДАЖЕ ПРИ НОРМАЛИЗОВАННОМ ВИДЕ ЧИСЛА, имеем дело не с ним, а с его приближением в какой то степени, что само по себе говорит нам что при сравнении необходимо иметь дело с погрешностями которые мы допускаем при расчетах и если эта погрешность превышена, должно работать наше условие. как в примере кода который я привел в первом своем посте в этой ветке.
с уважением.Нормализовать числа, перед отправкой торгового приказа - это необходимость, иначе вас отфутболят с ошибкой 129
Париться по поводу хвостов - нет смысла, отучайте себя от сравнения double на равенство, вот так более корректно: fabs(d1-d2) <= Point
При выводе в принт, приводите к строке с заданной точностью
я не вижу смысла вообще нормализовывать какие либо числа, по сути это сделать не возможно, так как сама машина вопреки нашему ЧЕЛОВЕЧЕСКОМУ смыслу приведет число не к целому какому то значению, а к приближенному. следовательно, как это принято работать с дробными, мы всегда, ДАЖЕ ПРИ НОРМАЛИЗОВАННОМ ВИДЕ ЧИСЛА, имеем дело не с ним, а с его приближением в какой то степени, что само по себе говорит нам что при сравнении необходимо иметь дело с погрешностями которые мы допускаем при расчетах и если эта погрешность превышена, должно работать наше условие. как в примере кода который я привел в первом своем посте в этой ветке.
с уважением.Функция NormalizeDouble() поможет отцу русской демократии.
Нормализовать числа, перед отправкой торгового приказа - это необходимость, иначе вас отфутболят с ошибкой 129
Париться по поводу хвостов - нет смысла, отучайте себя от сравнения double на равенство, вот так более корректно: fabs(d1-d2) <= Point
При выводе в принт, приводите к строке с заданной точностью
Что значит отучаться? Так же можно отучаться есть и пить.
Если надо сравнивать, надо нормализовать до достаточной точности и сравнивать.
Нормализовать числа, перед отправкой торгового приказа - это необходимость, иначе вас отфутболят с ошибкой 129
Париться по поводу хвостов - нет смысла, отучайте себя от сравнения double на равенство, вот так более корректно: fabs(d1-d2) <= Point
При выводе в принт, приводите к строке с заданной точностью
я это говорю с самого начала https://www.mql5.com/ru/forum/205452#comment_5346762 , люди не понимают, что в машине нет десятичных чисел, и сравнивать формат double на равенство это все равно что монетку подкидывать, хоть ты ее нормализовал хоть не нормализовал погрешность будет всегда. что касается необходимости нормализации в торговых приказах, никто не утверждал что она не нужна, тут действуют правила работы с сервером и приказ, который вы отправляете на сервер, должен соответствовать определенным правилам, которые установлены производителем программного продукта и дилинговым центром, применяющий терминалы в торговле. я встречал дц у которых цена приходила с погрешностью меньше пипса, что приводило к ошибке при обработке ордера.