Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Угу, только такая неэффективность есть даже в С++. Для оператора && при первом условии == false остальные условия не высчитываются, а вот для || поведение не определено.
Странно, для || его тоже легко определить. Первое же условие true должно исключать необходимость в дальнейшем оценивании полного условия.
Странно, для || его тоже легко определить. Первое же условие true должно исключать необходимость в дальнейшем оценивании полного условия.
Говорю как есть. Определить легко, реализовать сложно.
Кроме того, от выражения
легко перейти к выражению
поэтому достаточно реализации только для &&Поправлю чуток.
Поправлю чуток.
Ну да, или так, я вместо отрицания блок else добавил.
в справке так и написано, как оно работает ..
Логическая операция И (&&) значений x и y. Значением выражения является ИСТИНА(1), если значения x и y истинны (не нуль). В противном случае - ЛОЖЬ(0). Логические выражения вычисляются ПОЛНОСТЬЮ, т.е., к ним не применяется схема так называемой "короткой оценки".
а ПОЛНОСТЬЮ - это то, что вас не удовлетворяет..
гм.. по-моему ни первая конструкция TheExpert'a -
вместо хотя бы одной истины из множества значений предлагается только одно - когда все значения ложь (или наоборот для else)
ни вторая Mathemat'a -
вместо хотя бы одной истины из множества значений предлагается только одно, когда все значения истина
не являются эквивалентными..
Раньше такое замечал, но думал что эти баги в программе не допустимы и поэтому не обращал особого внимания.
Неужели придется переделывать своих советников?
А если такая операция:
if (выражение1 && выражение2 && выражение3 && ........ && выражениеN)
Тогда что делать?
на данный момент просто учитывать, что все выражения будут вычислены. Но, строго говоря, проблема фрустрирует. Я уже как-то за свою практику программирования привык к определенным общепринятым концепциям и когда наткнулся на проблему не сразу даже понял в чем дело.
Угу, только такая неэффективность есть даже в С++. Для оператора && при первом условии == false остальные условия не высчитываются, а вот для || поведение не определено.
Что же Вы хотите от MQL?
минутку, про С++ не надо, выдержки из стандарта:
5.14 Logical AND operator [expr.log.and]
the second expression is evaluated.logical-and-expression:
inclusive-or-expression
logical-and-expression && inclusive-or-expression
1 The && operator groups left-to-right. The operands are both implicitly converted to type bool (clause 4). The result
is true if both operands are true and false otherwise. Unlike &, && guarantees left-to-right evaluation: the second
operand is not evaluated if the first operand is false.
2 The result is a bool. All side effects of the first expression except for destruction of temporaries (12.2) happen before
5.15 Logical OR operator [expr.log.or]
logical-or-expression:
logical-and-expression
logical-or-expression || logical-and-expression
1 The || operator groups left-to-right. The operands are both implicitly converted to bool (clause 4). It returns true if
either of its operands is true, and false otherwise. Unlike |, || guarantees left-to-right evaluation; moreover, the second
operand is not evaluated if the first operand evaluates to true.
2 The result is a bool. All side effects of the first expression except for destruction of temporaries (12.2) happen before
the second expression is evaluated
Да и вообще, честно говоря, не встречал пока языка, где б по другому было
этот вопрос проверка на тупость или я чего-то не понимаю ?
по-моему так и должно работать - чтобы получить результат условия, которое является составным условие1 && условие2,
то для этого необходимо получить результат каждого в отдельности.. оно так и происходит, дело в том, что
независимо от того, что возвращают ваши функции (true|false) это означает, что функции корректно отработали..
а чтобы было так как вы хотите, то в ShouldWeOpenAnOrder должна возникниуть исключительная ситуация типа необработанная ошибка деление на ноль
например
ну видимо просто действительно не понимаете. Для того чтобы понять, что выражение "expr1 && expr2" будет false, если первая его часть уже false вовсе необязательно высчитывать вторую. Про это здесь и идет речь.
минутку, про С++ не надо, выдержки из стандарта:
Сорри, значит зевнул.
Действительно зевнул, порядок определен для операторов || && и,
Приношу свои извинения и беру свои слова обратно :) .
м-да, не вник БЕРУ свои слова обратно - конструкции верные