Почему? Это операционно дороже, чем прямое сравнение.
Пожалуйста, объясните.
Потому, что прямое сравнение вещественных чисел часто приводит к ошибочному результату. И в связи с этим некоторые бездумно применяют этот способ везде, где надо и где не надо.
А по сути изначальный вариант если и отличается, то совсем незначительно.
Putnik #: Так сказал учитель по информатике в школе
увольнять..
во первых это не быстрее, во вторых не очевиднее для читающего, наконец это дело компилятора такие микро-оптимизации.
ну и под завязку не для всех доменов и классов разрешена (имеет смысл) операция "вычитание". Заменив оператор == на a-b==0 можно сделать программу невалидной
Ведь прямое сравнение вещественных чисел часто приводит к неверным результатам. И из-за этого некоторые люди бездумно применяют этот метод везде, где нужно и где не нужно.
А на самом деле исходный вариант если и отличается, то очень незначительно.
Пожалуйста, без дискуссий. Но я, конечно, не согласен с этим утверждением.
a-b==0 так же точно, как a==b. Это справедливо для всех типов данных, в том числе и для парных. Иначе процессор перестал бы быть детерминированным.
Плавающие точки имеют округления представления, согласен, но независимо от того, какое значение вы вводите, один и тот же вход всегда будет давать один и тот же выход.
То, чего вы добиваетесь, используя a-b==0, - это нечеткость вокруг очень большого значения при вычитании очень маленького значения, вы начинаете "привязывать" свой результат к верхней или нижней границе представления.
Это глючный код. Это нехорошо, и отлаживать его будет очень сложно.
Пожалуйста, без дискуссий. Но я, конечно, не согласен с этим утверждением.
a-b==0 так же точно, как a==b. Это справедливо для всех типов данных, в том числе и для парных. Иначе процессор перестал бы быть детерминированным.
Плавающие точки имеют округления представления, согласен, но независимо от того, какое значение вы вводите, один и тот же вход всегда будет давать один и тот же выход.
То, чего вы добиваетесь, используя a-b==0, - это нечеткость вокруг очень большого значения при вычитании очень маленького значения, вы начинаете "привязывать" свой результат к верхней или нижней границе представления.
Это глючный код. Это нехорошо, и отлаживать его будет очень сложно.
Сравнение
if(iOpen(NULL, 0, 0) == iClose(NULL, 0, 0)) // не всегда работаетif(iOpen(NULL, 0, 0) - iClose(NULL, 0, 0) == 0) // всегда работает
Не знаю что быстрее, но нам также нужна надёжность условий
Похоже авто переводчик глючит
Нет, все в порядке -
Forum on trading, automated trading systems and testing trading strategies
Features of the mql5 language, subtleties and tricks
Putnik, 2025.06.25 18:31
It is better to replace a==b with (a-b)==0 , it is better.
ОК, спасибо.
С другого компа зашел, только одна ошибка.
Лучше заменить a==b на (a-b)==0, так будет лучше.
Потому, что прямое сравнение вещественных чисел часто приводит к ошибочному результату. И в связи с этим некоторые бездумно применяют этот способ везде, где надо и где не надо.
А по сути изначальный вариант если и отличается, то совсем незначительно.
Исходя из того, что операционно это будет дешевле. Так сказал учитель по информатике в школе.
Сам я точно не могу сказать, спорить небуду.
Так сказал учитель по информатике в школе
увольнять..
во первых это не быстрее, во вторых не очевиднее для читающего, наконец это дело компилятора такие микро-оптимизации.
ну и под завязку не для всех доменов и классов разрешена (имеет смысл) операция "вычитание". Заменив оператор == на a-b==0 можно сделать программу невалидной
Ведь прямое сравнение вещественных чисел часто приводит к неверным результатам. И из-за этого некоторые люди бездумно применяют этот метод везде, где нужно и где не нужно.
А на самом деле исходный вариант если и отличается, то очень незначительно.
Сравнение
Не знаю что быстрее, но нам также нужна надёжность условий
a = 0.30000000000000004
b = 0.3
Именно поэтому a - b == 0 небезопасно для двоек.
Почему a != b? Потому что ни 0,1, ни 0,2, ни 0,3 не могут быть точно представлены в двоичном виде с типом double (64-битный IEEE 754).
Сравнение
Не знаю что быстрее, но нам также нужна надёжность условий
В данном конкретном примере ещё надёжнее так:
Да собственно и во всех остальных с double числами.